diff --git a/.gitignore b/.gitignore index a252ab5..1b1524a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,66 +1,7 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files +node_modules/ +.next/ +.next-*/ +.env .env*.local - -# vercel -.vercel - -# typescript *.tsbuildinfo next-env.d.ts - -# macOS -.DS_Store -.AppleDouble -.LSOverride - -# Windows -Thumbs.db -ehthumbs.db -Desktop.ini - -# Editor directories -.vscode/ -.idea/ -*.swp -*.swo -*~ -.env - -# local documentation -.local-docs/ - -# scripts -/scripts/manage-users.ts - -# 多主题构建产物 -/.next-product -/.next-editorial -/.next-niche -/.next-minimal diff --git a/README.md b/README.md index 96b1c1d..c73d849 100644 --- a/README.md +++ b/README.md @@ -1,499 +1,59 @@ -
+# AI Directory Platform -# Toolso.AI +可复用 AI Directory 底座 + 5 个独立网站(monorepo)。 -**An open-source AI tools directory to help you discover the best AI tools** +基于 [coolchange-ai/toolso-ai-open](https://github.com/coolchange-ai/toolso-ai-open) 二次开发, +按 `docs/AI-Directory-Platform开发计划与技术设计文档.md` 完成 MVP + V1 能力, +并用 **5 个独立网站** 验证底座的「快速、易用、可用、可靠」。 -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -[![Next.js](https://img.shields.io/badge/Next.js-16-black?logo=next.js)](https://nextjs.org/) -[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react)](https://react.dev/) -[![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?logo=typescript)](https://www.typescriptlang.org/) -[![Tailwind CSS](https://img.shields.io/badge/Tailwind%20CSS-3-06B6D4?logo=tailwindcss)](https://tailwindcss.com/) -[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-336791?logo=postgresql)](https://www.postgresql.org/) - -[English](#english) | [中文](#中文) - -
- -**Discover, explore, and share the best AI tools.** - -
- ---- - - - -## Overview - -Toolso.AI is an open-source AI tools directory designed to help users discover the best AI tools across various categories. Built with Next.js 16, React 19, and TypeScript, it features a modern, responsive interface with powerful search and filtering capabilities, multilingual support, and a comprehensive admin panel for tool management. - -### Key Features - -| Feature | Description | Benefits | -|---------|-------------|----------| -| **AI Tools Directory** | Categorized AI tools listing | Easy discovery and exploration | -| **Search & Filter** | Powerful search with category filters | Find the right tool quickly | -| **Admin Panel** | Tool & user management | Manage content with ease | -| **Favorites** | Save tools to your personal collection | Sign in and build your toolbox | -| **Newsletter** | Footer subscription backed by Resend | Grow your audience | -| **Blog System** | MDX-powered multilingual blog | SEO-optimized AI insights | -| **i18n** | next-intl internationalization | English & Chinese out of the box | -| **Authentication** | Better Auth + Google OAuth | User accounts and submissions | -| **Theming** | Light/Dark mode | Comfortable browsing experience | - -## Quick Start - -### Prerequisites - -- Node.js 18+ -- pnpm 8+ -- PostgreSQL database - -### Installation - -```bash -# Clone the repository -git clone https://github.com/coolchange-ai/toolso-ai-open.git -cd toolso-ai-open - -# Install dependencies -pnpm install - -# Set up environment variables -cp .env.example .env.local - -# Push database schema -pnpm db:push - -# (Optional) Seed 50 AI tools, 10 categories and 30 tags -pnpm seed:tools - -# (Optional) Create an admin account -pnpm admin:setup - -# Start development server -pnpm dev -``` - -Open [http://localhost:3000](http://localhost:3000) to see your app. - -### Environment Configuration - -Create `.env.local` with your configuration: - -```env -# Required -DATABASE_URL="postgresql://user:password@host/db?sslmode=require" -BETTER_AUTH_SECRET="your-secret-key-at-least-32-characters" -BETTER_AUTH_URL="http://localhost:3000" -NEXT_PUBLIC_APP_URL="http://localhost:3000" - -# Email (Required for auth features) -RESEND_API_KEY="re_your_api_key" -RESEND_FROM_EMAIL="Your App " - -# Optional: Google OAuth -AUTH_GOOGLE_ID="your-google-client-id" -AUTH_GOOGLE_SECRET="your-google-client-secret" -``` - -See [.env.example](.env.example) for all available options. - -## Project Structure +## 仓库结构 ``` -src/ -├── app/ -│ ├── [locale]/ # Internationalized routes -│ │ ├── (auth)/ # Authentication pages -│ │ ├── (marketing)/ # Public pages (home, blog, tools) -│ │ ├── (protected)/ # User dashboard, profile -│ │ └── (admin)/ # Admin panel -│ └── api/ # API routes -├── components/ # Reusable UI components -├── features/ # Feature modules -│ ├── auth/ # Authentication logic -│ ├── admin/ # Admin components -│ ├── tools/ # AI tools directory -│ └── navigation/ # Navigation components -├── lib/ # Core utilities -│ ├── auth.ts # Better Auth config -│ ├── db/ # Database schema & connection -│ └── email.ts # Email utilities -└── emails/ # React Email templates - -messages/ # i18n translation files -public/ # Static assets -scripts/ # Build & admin scripts +packages/core/ @aidir/core —— 底座库(页面组件体 / 业务模块 / 站点外壳工厂 / 种子与工具脚本) +sites/ +├── ai-stack/ AI Stack — Classic 目录 → http://localhost:3001 +├── launchai/ LaunchAI — Product Hunt 式社区 → http://localhost:3002 +├── the-ai-ledger/ The AI Ledger — Editorial 媒体 → http://localhost:3003 +├── devai-tools/ DevAI.tools — 开发者垂直 → http://localhost:3004 +└── findai/ findai — 极简搜索 → http://localhost:3005 +docs/ 设计文档 + 交付报告 ``` -## Tech Stack - -### Frontend -- **Framework**: Next.js 16 (App Router) -- **UI Library**: React 19 -- **Styling**: Tailwind CSS + Framer Motion -- **Components**: Custom components + Radix UI -- **Forms**: React Hook Form + Zod validation -- **Themes**: next-themes (dark/light mode) - -### Backend -- **Authentication**: Better Auth -- **Database**: PostgreSQL + Drizzle ORM -- **Email**: Resend -- **Storage**: Cloudflare R2 / AWS S3 - -### Developer Experience -- **Language**: TypeScript (strict mode) -- **Linting**: ESLint -- **Package Manager**: pnpm - -## Available Scripts - -```bash -pnpm dev # Start development server -pnpm build # Build for production -pnpm start # Start production server -pnpm lint # Run ESLint (flat config) -pnpm typecheck # Run TypeScript type check -pnpm i18n:check # Verify translation key consistency - -# Database -pnpm db:generate # Generate Drizzle migrations -pnpm db:migrate # Run migrations -pnpm db:push # Push schema to database -pnpm db:studio # Open Drizzle Studio -pnpm seed:tools # Seed AI tools data - -# Admin -pnpm admin:setup # Create admin account - -# Content -pnpm generate:blog-manifest # Generate blog manifest -``` - -## Deployment - -### Vercel (Recommended) - -1. Push your code to GitHub -2. Import project in [Vercel](https://vercel.com) -3. Add environment variables -4. Deploy - -### Docker - -```bash -# Start PostgreSQL + app -docker compose up -d --build - -# Initialize database (run from host) -DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm db:push -DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm seed:tools -DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm admin:setup -``` - -### Other Platforms - -The template works with any platform supporting Node.js: -- Railway -- Render -- Self-hosted - -### Deployment Checklist - -- [ ] Set up PostgreSQL database (Supabase, Neon, or Vercel Postgres) -- [ ] Configure Resend for email -- [ ] Update `BETTER_AUTH_URL` and `NEXT_PUBLIC_APP_URL` with production domain -- [ ] Run `pnpm db:push` to initialize database -- [ ] Create admin account with `pnpm admin:setup` - -## Internationalization - -The template supports multiple languages via `next-intl`: - -- **Supported**: English (`en`), Chinese (`zh`) -- **Route Format**: English is the default locale without prefix (`/...`), Chinese uses `/zh/...` (`localePrefix: 'as-needed'`) -- **Translation Files**: `messages/en.json`, `messages/zh.json` -- **Consistency Check**: `pnpm i18n:check` - -### Adding a New Language - -1. Copy `messages/en.json` to `messages/{locale}.json` -2. Translate the content -3. Update `i18n.config.ts` - -> Note: UI copy is fully translatable via JSON files, but tool/category/tag **data** is stored as bilingual columns (`nameEn`/`nameZh`) in the database. Adding a third content language requires extending the schema and queries. - -## Roadmap - -- [ ] User tool submission with review workflow -- [ ] Tool ratings & comments -- [ ] Automated tool data import pipeline - -## Contributing - -We welcome contributions! Please feel free to submit a Pull Request. - -1. Fork the repository -2. Create your feature branch (`git checkout -b feature/amazing-feature`) -3. Commit your changes (`git commit -m 'Add some amazing feature'`) -4. Push to the branch (`git push origin feature/amazing-feature`) -5. Open a Pull Request - -## License - -This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details. - ---- - - - -## 项目概览 - -Toolso.AI 是一个开源的 AI 工具导航站,旨在帮助用户发现各类优秀的 AI 工具。基于 Next.js 16、React 19 和 TypeScript 构建,拥有现代化的响应式界面、强大的搜索和筛选功能、多语言支持,以及完善的后台管理系统。 - -### 核心特性 - -| 特性 | 描述 | 优势 | -|------|------|------| -| **AI 工具目录** | 分类展示 AI 工具 | 轻松发现和探索 | -| **搜索与筛选** | 强大的搜索和分类筛选 | 快速找到合适的工具 | -| **管理后台** | 工具和用户管理 | 轻松管理内容 | -| **收藏功能** | 登录用户可收藏工具 | 打造个人工具箱 | -| **Newsletter** | 页脚订阅(基于 Resend) | 沉淀你的用户 | -| **博客系统** | MDX 驱动的多语言博客 | SEO 优化的 AI 资讯 | -| **国际化** | next-intl 国际化 | 中英文开箱即用 | -| **身份认证** | Better Auth + Google OAuth | 用户账户和提交功能 | -| **主题切换** | 深色/浅色模式 | 舒适的浏览体验 | +五个网站共享同一套 PostgreSQL / Better Auth / Admin(设计文档 §42 验证标准), +各自独立构建、独立部署(各自 `package.json` / `next.config.mjs` / `.env.local`)。 ## 快速开始 -### 前置要求 - -- Node.js 18+ -- pnpm 8+ -- PostgreSQL 数据库 - -### 安装步骤 - ```bash -# 克隆仓库 -git clone https://github.com/coolchange-ai/toolso-ai-open.git -cd toolso-ai-open +bun install +cd packages/core && cp .env.example .env.local && bun run db:push && bun run seed:platform && cd ../.. -# 安装依赖 -pnpm install +# 构建 5 个网站(构建时数据库需在线;构建期间不要运行站点) +for s in ai-stack launchai the-ai-ledger devai-tools findai; do + (cd sites/$s && cp -n .env.example .env.local && bun run build) +done -# 设置环境变量 -cp .env.example .env.local - -# 推送数据库结构 -pnpm db:push - -# (可选)导入 50 个 AI 工具、10 个分类、30 个标签种子数据 -pnpm seed:tools - -# (可选)创建管理员账户 -pnpm admin:setup - -# 启动开发服务器 -pnpm dev +# 一键启动 +bash packages/core/scripts/start-all-sites.sh ``` -打开 [http://localhost:3000](http://localhost:3000) 查看应用。 +演示账号:`admin@aidirectory.dev`(管理员)/ `alice@demo.dev` 等用户,密码均为 `password123`。 -### 环境变量配置 +## 底座能力 -创建 `.env.local` 并配置: +Tool Directory · 三维发现(Category / Use Case / Audience)· 最佳清单(Best Lists)· +搜索(PostgreSQL)· 七榜 Ranking Engine(Trending 贝叶斯评分等)· 投票 · 评论 · 收藏 · +工具提交(重复检测)· 认领(Owner 白名单编辑)· 事件分析(CTR/搜索词)· +Programmatic SEO(用例页/受众页/合集页/Alternatives/Vs 对比页 + Schema 全套)· +博客 · Newsletter · 双语 i18n · GitHub/Google OAuth · 邮箱认证 · Admin 后台(8 个模块)· +深浅主题 · Lucide SVG 图标(无 Emoji)。 -```env -# 必需配置 -DATABASE_URL="postgresql://user:password@host/db?sslmode=require" -BETTER_AUTH_SECRET="至少32字符的密钥" -BETTER_AUTH_URL="http://localhost:3000" -NEXT_PUBLIC_APP_URL="http://localhost:3000" +## 新增一个网站 -# 邮件(认证功能必需) -RESEND_API_KEY="re_your_api_key" -RESEND_FROM_EMAIL="Your App " +1. 在 `packages/core/scripts/generate-site.mjs` 的 `SITES` 中加一个条目(品牌/导航/页脚/SEO/端口)。 +2. `bun packages/core/scripts/generate-site.mjs ` —— 生成独立站点(约 56 个薄路由 + 配置)。 +3. `cd sites/ && bun install && bun run build && bun run start`。 -# 可选:Google OAuth -AUTH_GOOGLE_ID="your-google-client-id" -AUTH_GOOGLE_SECRET="your-google-client-secret" -``` +零 Core 代码修改。 -完整配置请参考 [.env.example](.env.example)。 - -## 项目结构 - -``` -src/ -├── app/ -│ ├── [locale]/ # 国际化路由 -│ │ ├── (auth)/ # 认证页面 -│ │ ├── (marketing)/ # 公开页面(首页、博客、工具) -│ │ ├── (protected)/ # 用户仪表板、个人资料 -│ │ └── (admin)/ # 管理后台 -│ └── api/ # API 路由 -├── components/ # 可复用 UI 组件 -├── features/ # 功能模块 -│ ├── auth/ # 认证逻辑 -│ ├── admin/ # 管理后台组件 -│ ├── tools/ # AI 工具目录 -│ └── navigation/ # 导航组件 -├── lib/ # 核心工具库 -│ ├── auth.ts # Better Auth 配置 -│ ├── db/ # 数据库 Schema 和连接 -│ └── email.ts # 邮件工具 -└── emails/ # React Email 模板 - -messages/ # 国际化翻译文件 -public/ # 静态资源 -scripts/ # 构建和管理脚本 -``` - -## 技术栈 - -### 前端 -- **框架**: Next.js 16 (App Router) -- **UI 库**: React 19 -- **样式**: Tailwind CSS + Framer Motion -- **组件**: 自定义组件 + Radix UI -- **表单**: React Hook Form + Zod 验证 -- **主题**: next-themes (深色/浅色模式) - -### 后端 -- **身份认证**: Better Auth -- **数据库**: PostgreSQL + Drizzle ORM -- **邮件**: Resend -- **存储**: Cloudflare R2 / AWS S3 - -### 开发体验 -- **语言**: TypeScript (严格模式) -- **代码检查**: ESLint -- **包管理器**: pnpm - -## 可用脚本 - -```bash -pnpm dev # 启动开发服务器 -pnpm build # 构建生产版本 -pnpm start # 启动生产服务器 -pnpm lint # 运行 ESLint(flat config) -pnpm typecheck # TypeScript 类型检查 -pnpm i18n:check # 校验翻译键一致性 - -# 数据库 -pnpm db:generate # 生成 Drizzle 迁移 -pnpm db:migrate # 运行迁移 -pnpm db:push # 推送 schema 到数据库 -pnpm db:studio # 打开 Drizzle Studio -pnpm seed:tools # 导入工具种子数据 - -# 管理员 -pnpm admin:setup # 创建管理员账户 - -# 内容 -pnpm generate:blog-manifest # 生成博客清单 -``` - -## 部署指南 - -### Vercel(推荐) - -1. 将代码推送到 GitHub -2. 在 [Vercel](https://vercel.com) 导入项目 -3. 添加环境变量 -4. 部署 - -### Docker - -```bash -# 启动 PostgreSQL + 应用 -docker compose up -d --build - -# 初始化数据库(在宿主机执行) -DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm db:push -DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm seed:tools -DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm admin:setup -``` - -### 其他平台 - -模板支持任何支持 Node.js 的平台: -- Railway -- Render -- 自托管 - -### 部署清单 - -- [ ] 设置 PostgreSQL 数据库(Supabase、Neon 或 Vercel Postgres) -- [ ] 配置 Resend 邮件服务 -- [ ] 更新 `BETTER_AUTH_URL` 和 `NEXT_PUBLIC_APP_URL` 为生产域名 -- [ ] 运行 `pnpm db:push` 初始化数据库 -- [ ] 使用 `pnpm admin:setup` 创建管理员账户 - -## 国际化 - -模板通过 `next-intl` 支持多语言: - -- **已支持**: 英文 (`en`)、中文 (`zh`) -- **路由格式**: 英文为默认语言不带前缀(`/...`),中文为 `/zh/...`(`localePrefix: 'as-needed'`) -- **翻译文件**: `messages/en.json`、`messages/zh.json` -- **一致性检查**: `pnpm i18n:check` - -### 添加新语言 - -1. 复制 `messages/en.json` 到 `messages/{语言代码}.json` -2. 翻译内容 -3. 更新 `i18n.config.ts` - -> 注意:UI 文案可完全通过 JSON 文件翻译,但工具/分类/标签的**数据**在数据库中以双语列(`nameEn`/`nameZh`)存储。新增第三种内容语言需要扩展 schema 和查询。 - -## Roadmap - -- [ ] 用户工具提交与审核工作流 -- [ ] 工具评分与评论 -- [ ] 自动化工具数据采集管线 - -## 贡献指南 - -欢迎贡献!请随时提交 Pull Request。 - -1. Fork 仓库 -2. 创建特性分支 (`git checkout -b feature/amazing-feature`) -3. 提交更改 (`git commit -m 'Add some amazing feature'`) -4. 推送到分支 (`git push origin feature/amazing-feature`) -5. 开启 Pull Request - -## 开源协议 - -本项目基于 Apache License 2.0 开源 - 详情请查看 [LICENSE](LICENSE) 文件。 - ---- - -
- -## Related Projects - -| Project | Description | Link | -|---------|-------------|------| -| **Toolso.AI** | AI Tools Directory | [https://toolso.ai](https://toolso.ai) | -| **CoolChange.AI** | AI Development Studio | [https://coolchange.ai](https://coolchange.ai) | -| **chatPPT.app** | AI Presentation Generator | [https://chatppt.app](https://chatppt.app) | -| **AIHealthGuide** | AI Health Assistant | [https://aihealthguide.app](https://aihealthguide.app) | - -
- ---- - -
- -**Built with love by [CoolChange.AI](https://coolchange.ai)** - -
- -If you find this project helpful, please consider giving it a star! - -
+详细验收对照见 `docs/交付报告.md`。 diff --git a/bun.lock b/bun.lock index efc0790..1110244 100644 --- a/bun.lock +++ b/bun.lock @@ -1,9 +1,13 @@ { "lockfileVersion": 2, - "configVersion": 0, + "configVersion": 1, "workspaces": { "": { - "name": "nextjs", + "name": "ai-directory-platform", + }, + "packages/core": { + "name": "@aidir/core", + "version": "1.0.0", "dependencies": { "@aws-sdk/client-s3": "^3.958.0", "@better-auth/client": "0.0.2-alpha.3", @@ -73,11 +77,141 @@ "typescript": "^5", }, }, + "sites/ai-stack": { + "name": "site-ai-stack", + "version": "1.0.0", + "dependencies": { + "@aidir/core": "workspace:*", + "framer-motion": "^12.43.0", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "next": "16.1.1", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "sonner": "^2.0.7", + }, + "devDependencies": { + "@types/mdx": "^2.0.13", + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "typescript": "^5", + }, + }, + "sites/devai-tools": { + "name": "site-devai-tools", + "version": "1.0.0", + "dependencies": { + "@aidir/core": "workspace:*", + "framer-motion": "^12.43.0", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "next": "16.1.1", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "sonner": "^2.0.7", + }, + "devDependencies": { + "@types/mdx": "^2.0.13", + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "typescript": "^5", + }, + }, + "sites/findai": { + "name": "site-findai", + "version": "1.0.0", + "dependencies": { + "@aidir/core": "workspace:*", + "framer-motion": "^12.43.0", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "next": "16.1.1", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "sonner": "^2.0.7", + }, + "devDependencies": { + "@types/mdx": "^2.0.13", + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "typescript": "^5", + }, + }, + "sites/launchai": { + "name": "site-launchai", + "version": "1.0.0", + "dependencies": { + "@aidir/core": "workspace:*", + "framer-motion": "^12.43.0", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "next": "16.1.1", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "sonner": "^2.0.7", + }, + "devDependencies": { + "@types/mdx": "^2.0.13", + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "typescript": "^5", + }, + }, + "sites/the-ai-ledger": { + "name": "site-the-ai-ledger", + "version": "1.0.0", + "dependencies": { + "@aidir/core": "workspace:*", + "framer-motion": "^12.43.0", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "next": "16.1.1", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "sonner": "^2.0.7", + }, + "devDependencies": { + "@types/mdx": "^2.0.13", + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "typescript": "^5", + }, + }, }, "packages": { - "@aashutoshrathi/word-wrap": ["@aashutoshrathi/word-wrap@1.2.6", "", {}, "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA=="], + "@aidir/core": ["@aidir/core@workspace:packages/core"], - "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], + "@alloc/quick-lru": ["@alloc/quick-lru@5.3.0", "", {}, "sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA=="], "@aws-sdk/checksums": ["@aws-sdk/checksums@3.1000.29", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-Dtu0gr4dnATZAPwEYbpCsG+MpLM7OAliy2gTepEFQwl1vZ6DL3QMH2FveMa3HLvPsOdhJsPRB3KtxVhph9T75A=="], @@ -141,8 +275,6 @@ "@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="], - "@babel/runtime": ["@babel/runtime@7.24.4", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA=="], - "@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/traverse": ["@babel/traverse@7.29.8", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.8", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg=="], @@ -177,8 +309,12 @@ "@eloqnt/format-po": ["@eloqnt/format-po@0.1.0", "", { "dependencies": { "@eloqnt/config": "^0.1.0", "po-parser": "^2.2.0" } }, "sha512-odgtuICWs67GdkNqY51/d2vaIukuOdlGalKASUGkI5c4cyWOmv/WIVyk5gZyn3xr614RzwWp57s9WB40lRLlBw=="], + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + "@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + "@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="], "@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="], @@ -261,7 +397,7 @@ "@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.8.13", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.7" } }, "sha512-kHEAFOkeJSPNi7c5PaKaRjxcBrJwzzt81ifUu+8uve1EDW/VJl83KsxmqgqNZLzcFEhSliZGvx3+pk/RH0IOmg=="], - "@hookform/resolvers": ["@hookform/resolvers@3.4.2", "", { "peerDependencies": { "react-hook-form": "^7.0.0" } }, "sha512-1m9uAVIO8wVf7VCDAGsuGA0t6Z3m6jVGAN50HkV9vYLl0yixKK/Z1lr01vaRvYCkIKGoy1noVRxMzQYb4y/j1Q=="], + "@hookform/resolvers": ["@hookform/resolvers@3.10.0", "", { "peerDependencies": { "react-hook-form": "^7.0.0" } }, "sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag=="], "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], @@ -325,33 +461,31 @@ "@isaacs/cliui": ["@isaacs/cliui@9.0.0", "", {}, "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg=="], - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.5", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], - "@jridgewell/source-map": ["@jridgewell/source-map@0.3.6", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ=="], - - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.4.15", "", {}, "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="], - - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], "@mapbox/rehype-prism": ["@mapbox/rehype-prism@0.9.0", "", { "dependencies": { "hast-util-to-string": "^1.0.4", "refractor": "^3.4.0", "unist-util-visit": "^2.0.3" } }, "sha512-ypmEaqzdrqSon5NJdPqTh79qmPK8ajAqIU9mdFhuWn3T4B/RT2nt3yH2JPcou1/Gx8DvSgJ+XP+fy60e8h3mpQ=="], - "@mdx-js/loader": ["@mdx-js/loader@3.0.1", "", { "dependencies": { "@mdx-js/mdx": "^3.0.0", "source-map": "^0.7.0" }, "peerDependencies": { "webpack": ">=5" } }, "sha512-YbYUt7YyEOdFxhyuCWmLKf5vKhID/hJAojEUnheJk4D8iYVLFQw+BAoBWru/dHGch1omtmZOPstsmKPyBF68Tw=="], + "@mdx-js/loader": ["@mdx-js/loader@3.1.1", "", { "dependencies": { "@mdx-js/mdx": "^3.0.0", "source-map": "^0.7.0" }, "peerDependencies": { "webpack": ">=5" }, "optionalPeers": ["webpack"] }, "sha512-0TTacJyZ9mDmY+VefuthVshaNIyCGZHJG2fMnGaDttCt8HmjUF7SizlHJpaCDoGnN635nK1wpzfpx/Xx5S4WnQ=="], - "@mdx-js/mdx": ["@mdx-js/mdx@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-to-js": "^2.0.0", "estree-walker": "^3.0.0", "hast-util-to-estree": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "periscopic": "^3.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA=="], + "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], - "@mdx-js/react": ["@mdx-js/react@3.0.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A=="], + "@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="], + + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.3", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" } }, "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q=="], "@next/env": ["@next/env@16.1.1", "", {}, "sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA=="], "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.1.1", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-Ovb/6TuLKbE1UiPcg0p39Ke3puyTCIKN9hGbNItmpQsp+WX3qrjO3WaMVSi6JHr9X1NrmthqIguVHodMJbh/dw=="], - "@next/mdx": ["@next/mdx@14.2.3", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-oVz7BWpoLQ9dKvCKxPIX9X6BILPTrpTJnYDn2lAsZvK7J9Ela6xNm57vNwgZ8q7xw1THSDdSlbPNgIalM7U/+A=="], + "@next/mdx": ["@next/mdx@14.2.35", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-Pekqjb1Rm4mm0wJgRRmVIdN8eCEMMdDeCCa+REHYb8lZ9K7vYsEAVHJ8XBq8XaLKp110p8k6JdUT64sFE/y8Uw=="], "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.1.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JS3m42ifsVSJjSTzh27nW+Igfha3NdBOFScr9C80hHGrWx55pTrVL23RJbqir7k7/15SKlrLHhh/MQzqBBYrQA=="], @@ -379,6 +513,8 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@nolyfill/is-core-module": ["@nolyfill/is-core-module@1.0.39", "", {}, "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA=="], + "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.43.0", "", {}, "sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg=="], "@parcel/watcher": ["@parcel/watcher@2.6.0", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.4" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.6.0", "@parcel/watcher-darwin-arm64": "2.6.0", "@parcel/watcher-darwin-x64": "2.6.0", "@parcel/watcher-freebsd-x64": "2.6.0", "@parcel/watcher-linux-arm-glibc": "2.6.0", "@parcel/watcher-linux-arm-musl": "2.6.0", "@parcel/watcher-linux-arm64-glibc": "2.6.0", "@parcel/watcher-linux-arm64-musl": "2.6.0", "@parcel/watcher-linux-x64-glibc": "2.6.0", "@parcel/watcher-linux-x64-musl": "2.6.0", "@parcel/watcher-win32-arm64": "2.6.0", "@parcel/watcher-win32-x64": "2.6.0" } }, "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w=="], @@ -407,15 +543,13 @@ "@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.6.0", "", { "os": "win32", "cpu": "x64" }, "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A=="], - "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.5", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA=="], - "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.0.1", "", { "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw=="], + "@radix-ui/react-label": ["@radix-ui/react-label@2.1.15", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-o/rdYEwZTTo5tjknnPeyQFU45kUC4i/XyeDPP+HGyi6XqpOP6Zf5Ya5vh/Yfe9Id5JiuWnnAx2XqIeD3UYZt0g=="], - "@radix-ui/react-label": ["@radix-ui/react-label@2.0.2", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ=="], + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.10", "", { "dependencies": { "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg=="], - "@radix-ui/react-primitive": ["@radix-ui/react-primitive@1.0.3", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-slot": "1.0.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g=="], - - "@radix-ui/react-slot": ["@radix-ui/react-slot@1.0.2", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "1.0.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg=="], + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.3.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.5" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q=="], "@react-email/body": ["@react-email/body@0.1.0", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-o1bcSAmDYNNHECbkeyceCVPGmVsYvT+O3sSO/Ct7apKUu3JphTi31hu+0Nwqr/pgV5QFqdoT5vdS3SW5DJFHgQ=="], @@ -515,33 +649,29 @@ "@swc/types": ["@swc/types@0.1.28", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw=="], - "@tabler/icons": ["@tabler/icons@3.5.0", "", {}, "sha512-I53dC3ZSHQ2MZFGvDYJelfXm91L2bTTixS4w5jTAulLhHbCZso5Bih4Rk/NYZxlngLQMKHvEYwZQ+6w/WluKiA=="], + "@tabler/icons": ["@tabler/icons@3.46.0", "", {}, "sha512-f2RYFl3fzPwj5WO82x6en0dmkjefxEfOm16D1ByM6cj/McNiwOkL4VaPUoP9VVIrXAD9WnTSVFr70px703b//A=="], - "@tabler/icons-react": ["@tabler/icons-react@3.5.0", "", { "dependencies": { "@tabler/icons": "3.5.0" }, "peerDependencies": { "react": ">= 16" } }, "sha512-bn05XKZV3ZfOv5Jr1FCTmVPOQGBVJoA4NefrnR919rqg6WGXAa08NovONHJGSuMxXUMV3b9Cni85diIW/E9yuw=="], + "@tabler/icons-react": ["@tabler/icons-react@3.46.0", "", { "dependencies": { "@tabler/icons": "3.46.0" }, "peerDependencies": { "react": ">= 16" } }, "sha512-CCm7xJWhDT2PH4ZIFkP6AgYKtVhq0gpYkjUN+GVh1AzmIQaa77OW0bQPBPQiTE0PsXMR9oSxFqA3qBglzPyrVQ=="], - "@tailwindcss/typography": ["@tailwindcss/typography@0.5.13", "", { "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw=="], + "@tailwindcss/typography": ["@tailwindcss/typography@0.5.20", "", { "dependencies": { "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || >=4.0.0 || insiders" } }, "sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw=="], "@tanstack/react-store": ["@tanstack/react-store@0.7.7", "", { "dependencies": { "@tanstack/store": "0.7.7", "use-sync-external-store": "^1.5.0" }, "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" } }, "sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg=="], "@tanstack/store": ["@tanstack/store@0.7.7", "", {}, "sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ=="], - "@types/acorn": ["@types/acorn@4.0.6", "", { "dependencies": { "@types/estree": "*" } }, "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], "@types/bun": ["@types/bun@1.4.2", "", { "dependencies": { "bun-types": "1.4.2" } }, "sha512-GimotNn7+ZV0uVArItBbriZsR1oNf0+WTzPkdcFrzShI7k2norL0uzEaJT8T33dWr7O/c9ZDuAFQrctKCi72oQ=="], "@types/cors": ["@types/cors@2.8.19", "", { "dependencies": { "@types/node": "*" } }, "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg=="], - "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], - - "@types/eslint": ["@types/eslint@8.56.10", "", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ=="], - - "@types/eslint-scope": ["@types/eslint-scope@3.7.7", "", { "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg=="], + "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], - "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + "@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], @@ -549,17 +679,17 @@ "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], - "@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="], + "@types/mdx": ["@types/mdx@2.0.14", "", {}, "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg=="], - "@types/ms": ["@types/ms@0.7.34", "", {}, "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="], + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@20.12.7", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg=="], + "@types/node": ["@types/node@20.19.43", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA=="], "@types/react": ["@types/react@19.2.18", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w=="], "@types/react-dom": ["@types/react-dom@19.2.7", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-I8bPpDLcHBv1qiIiXDCy71Rt8eQDKJP0sMSWJphDdAcdqiJ1sGpZamavoEIRZmYzjia9LuEb2HlYdDpmoENpvQ=="], - "@types/unist": ["@types/unist@2.0.10", "", {}, "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="], + "@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], @@ -583,59 +713,65 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.70.0", "", { "dependencies": { "@typescript-eslint/types": "8.70.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ=="], - "@ungap/structured-clone": ["@ungap/structured-clone@1.2.0", "", {}, "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.4.0", "", {}, "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ=="], + + "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.12.2", "", { "os": "android", "cpu": "arm" }, "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w=="], + + "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.12.2", "", { "os": "android", "cpu": "arm64" }, "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ=="], + + "@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.12.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w=="], + + "@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.12.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA=="], + + "@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.12.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg=="], + + "@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2", "", { "os": "linux", "cpu": "arm" }, "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A=="], + + "@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.12.2", "", { "os": "linux", "cpu": "arm" }, "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g=="], + + "@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.12.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg=="], + + "@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.12.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA=="], + + "@unrs/resolver-binding-linux-loong64-gnu": ["@unrs/resolver-binding-linux-loong64-gnu@1.12.2", "", { "os": "linux", "cpu": "none" }, "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q=="], + + "@unrs/resolver-binding-linux-loong64-musl": ["@unrs/resolver-binding-linux-loong64-musl@1.12.2", "", { "os": "linux", "cpu": "none" }, "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew=="], + + "@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.12.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg=="], + + "@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.12.2", "", { "os": "linux", "cpu": "none" }, "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A=="], + + "@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.12.2", "", { "os": "linux", "cpu": "none" }, "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w=="], + + "@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.12.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw=="], + + "@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.12.2", "", { "os": "linux", "cpu": "x64" }, "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ=="], + + "@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.12.2", "", { "os": "linux", "cpu": "x64" }, "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A=="], + + "@unrs/resolver-binding-openharmony-arm64": ["@unrs/resolver-binding-openharmony-arm64@1.12.2", "", { "os": "none", "cpu": "arm64" }, "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ=="], + + "@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.12.2", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A=="], + + "@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.12.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g=="], + + "@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.12.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g=="], + + "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.12.2", "", { "os": "win32", "cpu": "x64" }, "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA=="], "@vercel/analytics": ["@vercel/analytics@1.6.1", "", { "peerDependencies": { "@remix-run/react": "^2", "@sveltejs/kit": "^1 || ^2", "next": ">= 13", "react": "^18 || ^19 || ^19.0.0-rc", "svelte": ">= 4", "vue": "^3", "vue-router": "^4" }, "optionalPeers": ["@remix-run/react", "@sveltejs/kit", "next", "react", "svelte", "vue", "vue-router"] }, "sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg=="], "@vercel/speed-insights": ["@vercel/speed-insights@1.3.1", "", { "peerDependencies": { "@sveltejs/kit": "^1 || ^2", "next": ">= 13", "react": "^18 || ^19 || ^19.0.0-rc", "svelte": ">= 4", "vue": "^3", "vue-router": "^4" }, "optionalPeers": ["@sveltejs/kit", "next", "react", "svelte", "vue", "vue-router"] }, "sha512-PbEr7FrMkUrGYvlcLHGkXdCkxnylCWePx7lPxxq36DNdfo9mcUjLOmqOyPDHAOgnfqgGGdmE3XI9L/4+5fr+vQ=="], - "@webassemblyjs/ast": ["@webassemblyjs/ast@1.12.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg=="], - - "@webassemblyjs/floating-point-hex-parser": ["@webassemblyjs/floating-point-hex-parser@1.11.6", "", {}, "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw=="], - - "@webassemblyjs/helper-api-error": ["@webassemblyjs/helper-api-error@1.11.6", "", {}, "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q=="], - - "@webassemblyjs/helper-buffer": ["@webassemblyjs/helper-buffer@1.12.1", "", {}, "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw=="], - - "@webassemblyjs/helper-numbers": ["@webassemblyjs/helper-numbers@1.11.6", "", { "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g=="], - - "@webassemblyjs/helper-wasm-bytecode": ["@webassemblyjs/helper-wasm-bytecode@1.11.6", "", {}, "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA=="], - - "@webassemblyjs/helper-wasm-section": ["@webassemblyjs/helper-wasm-section@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/wasm-gen": "1.12.1" } }, "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g=="], - - "@webassemblyjs/ieee754": ["@webassemblyjs/ieee754@1.11.6", "", { "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg=="], - - "@webassemblyjs/leb128": ["@webassemblyjs/leb128@1.11.6", "", { "dependencies": { "@xtuc/long": "4.2.2" } }, "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ=="], - - "@webassemblyjs/utf8": ["@webassemblyjs/utf8@1.11.6", "", {}, "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA=="], - - "@webassemblyjs/wasm-edit": ["@webassemblyjs/wasm-edit@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-section": "1.12.1", "@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-opt": "1.12.1", "@webassemblyjs/wasm-parser": "1.12.1", "@webassemblyjs/wast-printer": "1.12.1" } }, "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g=="], - - "@webassemblyjs/wasm-gen": ["@webassemblyjs/wasm-gen@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w=="], - - "@webassemblyjs/wasm-opt": ["@webassemblyjs/wasm-opt@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-parser": "1.12.1" } }, "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg=="], - - "@webassemblyjs/wasm-parser": ["@webassemblyjs/wasm-parser@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ=="], - - "@webassemblyjs/wast-printer": ["@webassemblyjs/wast-printer@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA=="], - - "@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="], - - "@xtuc/long": ["@xtuc/long@4.2.2", "", {}, "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="], - "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], "acorn": ["acorn@8.18.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="], - "acorn-import-assertions": ["acorn-import-assertions@1.9.0", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA=="], - "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], "ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], - "ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], - - "ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], + "ansi-regex": ["ansi-regex@6.3.0", "", {}, "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -667,7 +803,9 @@ "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="], - "astring": ["astring@1.8.6", "", { "bin": "bin/astring" }, "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg=="], + "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], + + "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], @@ -691,11 +829,11 @@ "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], - "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "brace-expansion": ["brace-expansion@1.1.18", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw=="], - "braces": ["braces@3.0.2", "", { "dependencies": { "fill-range": "^7.0.1" } }, "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="], + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "browserslist": ["browserslist@4.23.0", "", { "dependencies": { "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, "bin": "cli.js" }, "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ=="], + "browserslist": ["browserslist@4.28.9", "", { "dependencies": { "baseline-browser-mapping": "^2.11.20", "caniuse-lite": "^1.0.30001810", "electron-to-chromium": "^1.5.420", "node-releases": "^2.0.54", "update-browserslist-db": "^1.3.2" }, "bin": { "browserslist": "cli.js" } }, "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg=="], "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], @@ -711,7 +849,7 @@ "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001612", "", {}, "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g=="], + "caniuse-lite": ["caniuse-lite@1.0.30001810", "", {}, "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], @@ -727,11 +865,9 @@ "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], - "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], - "class-variance-authority": ["class-variance-authority@0.7.0", "", { "dependencies": { "clsx": "2.0.0" } }, "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A=="], + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], @@ -741,7 +877,7 @@ "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], - "cobe": ["cobe@0.6.3", "", { "dependencies": { "phenomenon": "^1.6.0" } }, "sha512-WHr7X4o1ym94GZ96h7b1pNemZJacbOzd02dZtnVwuC4oWBaLg96PBmp2rIS1SAhUDhhC/QyS9WEqkpZIs/ZBTg=="], + "cobe": ["cobe@0.6.5", "", { "dependencies": { "phenomenon": "^1.6.0" } }, "sha512-MA8bu81EFY6JjQpj+FovEuhyJ25khx2Q7Lh+ot/UkCJe5yKyDgzdc6u2lGZIOmsZTXK6Itg1i4lQZIJZbPWnAg=="], "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], @@ -773,7 +909,7 @@ "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], - "cssesc": ["cssesc@3.0.0", "", { "bin": "bin/cssesc" }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], @@ -789,9 +925,9 @@ "debounce": ["debounce@2.2.0", "", {}, "sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw=="], - "debug": ["debug@4.3.4", "", { "dependencies": { "ms": "2.1.2" } }, "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "decode-named-character-reference": ["decode-named-character-reference@1.0.2", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg=="], + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], @@ -833,9 +969,7 @@ "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - - "electron-to-chromium": ["electron-to-chromium@1.4.787", "", {}, "sha512-d0EFmtLPjctczO3LogReyM2pbBiiZbnsKnGF+cdZhsYzHm/A0GV7W94kqzLD8SN4O3f3iHlgLUChqghgyznvCQ=="], + "electron-to-chromium": ["electron-to-chromium@1.5.423", "", {}, "sha512-rRZfTSY8ptHYMQxa+uIycJMFKmY1T0GIApNMXJYGehguTZa56TEEl19pKPCoBqk5Gpf7QizZn/jt7xur+DYxag=="], "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], @@ -843,8 +977,6 @@ "engine.io-parser": ["engine.io-parser@5.2.3", "", {}, "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q=="], - "enhanced-resolve": ["enhanced-resolve@5.16.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA=="], - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], "es-abstract": ["es-abstract@1.24.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg=="], @@ -857,8 +989,6 @@ "es-iterator-helpers": ["es-iterator-helpers@1.4.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" } }, "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q=="], - "es-module-lexer": ["es-module-lexer@1.5.3", "", {}, "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg=="], - "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], @@ -867,9 +997,13 @@ "es-to-primitive": ["es-to-primitive@1.3.4", "", { "dependencies": { "es-abstract-get": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "is-callable": "^1.2.7", "is-date-object": "^1.1.0", "is-symbol": "^1.1.1" } }, "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw=="], + "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], + + "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], + "esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], - "escalade": ["escalade@3.1.2", "", {}, "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA=="], + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], @@ -877,11 +1011,11 @@ "eslint-config-next": ["eslint-config-next@16.1.1", "", { "dependencies": { "@next/eslint-plugin-next": "16.1.1", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^7.0.0", "globals": "16.4.0", "typescript-eslint": "^8.46.0" }, "peerDependencies": { "eslint": ">=9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-55nTpVWm3qeuxoQKLOjQVciKZJUphKrNM0fCcQHAIOGl6VFXgaqeMfv0aKJhs7QtcnlAPhNVqsqRfRjeKBPIUA=="], - "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], + "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.10", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.16.1", "resolve": "^2.0.0-next.6" } }, "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ=="], - "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.6.1", "", { "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", "eslint-module-utils": "^2.7.4", "fast-glob": "^3.3.1", "get-tsconfig": "^4.5.0", "is-core-module": "^2.11.0", "is-glob": "^4.0.3" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg=="], + "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.10.1", "", { "dependencies": { "@nolyfill/is-core-module": "1.0.39", "debug": "^4.4.0", "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", "tinyglobby": "^0.2.13", "unrs-resolver": "^1.6.2" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*", "eslint-plugin-import-x": "*" }, "optionalPeers": ["eslint-plugin-import", "eslint-plugin-import-x"] }, "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ=="], - "eslint-module-utils": ["eslint-module-utils@2.8.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q=="], + "eslint-module-utils": ["eslint-module-utils@2.14.0", "", { "dependencies": { "debug": "^3.2.7" }, "peerDependencies": { "eslint": "*" }, "optionalPeers": ["eslint"] }, "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig=="], "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="], @@ -897,7 +1031,7 @@ "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], - "esquery": ["esquery@1.5.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg=="], + "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], @@ -909,6 +1043,8 @@ "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], + "estree-util-scope": ["estree-util-scope@1.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-B0np3dcdxqILX5e9nEi5/Fr4K7gL4oYFVPV1zRa2e9wRCbQoZZNWOZFYyoInvXUPJXBXjss+QXlWLJChDEHDkA=="], + "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="], "estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="], @@ -917,15 +1053,13 @@ "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "exsolve": ["exsolve@1.1.1", "", {}, "sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g=="], "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - "fast-glob": ["fast-glob@3.3.2", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow=="], + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], @@ -933,21 +1067,21 @@ "fast-sha256": ["fast-sha256@1.3.0", "", {}, "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ=="], - "fastq": ["fastq@1.17.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w=="], + "fastq": ["fastq@1.20.3", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw=="], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], - "fill-range": ["fill-range@7.0.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="], + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], - "flatted": ["flatted@3.3.1", "", {}, "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw=="], + "flatted": ["flatted@3.4.4", "", {}, "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q=="], - "for-each": ["for-each@0.3.3", "", { "dependencies": { "is-callable": "^1.1.3" } }, "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw=="], + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], @@ -961,7 +1095,9 @@ "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], - "geist": ["geist@1.3.0", "", { "peerDependencies": { "next": ">=13.2.0 <15.0.0-0" } }, "sha512-IoGBfcqVEYB4bEwsfHd35jF4+X9LHRPYZymHL4YOltHSs9LJa24DYs1Z7rEMQ/lsEvaAIc61Y9aUxgcJaQ8lrg=="], + "geist": ["geist@1.7.2", "", { "peerDependencies": { "next": ">=13.2.0" } }, "sha512-Gu5lDFa3pLRyoBlBPf0QIFHVdWAnpco7fS1bJm41jyLPFoguBgiubseUN2oLXMgqZ7uxAxDoXcHMhCY/fOTTgg=="], + + "generator-function": ["generator-function@2.0.1", "", {}, "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g=="], "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], @@ -973,25 +1109,21 @@ "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "get-tsconfig": ["get-tsconfig@4.7.3", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg=="], + "get-tsconfig": ["get-tsconfig@4.14.3", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA=="], "glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="], "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], - "globals": ["globals@16.4.0", "", {}, "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="], "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], - "has-bigints": ["has-bigints@1.0.2", "", {}, "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="], + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], @@ -1003,15 +1135,15 @@ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], "hast-util-parse-selector": ["hast-util-parse-selector@2.2.5", "", {}, "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ=="], - "hast-util-to-estree": ["hast-util-to-estree@3.1.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", "style-to-object": "^0.4.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw=="], + "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="], - "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", "style-to-object": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ=="], + "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], "hast-util-to-string": ["hast-util-to-string@1.0.4", "", {}, "sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w=="], @@ -1035,13 +1167,13 @@ "icu-minify": ["icu-minify@4.14.2", "", { "dependencies": { "@formatjs/icu-messageformat-parser": "^3.4.0" } }, "sha512-2eJ9ooR8xXWbe0IivG58TFL96AUp5ts8FJ4qSMzn8YRJXpLmtPNWcUkIZ8t3iz0+eaVzG+mN+rdNIigHDvYa2Q=="], - "ignore": ["ignore@5.3.1", "", {}, "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw=="], + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "import-fresh": ["import-fresh@3.3.0", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="], + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "inline-style-parser": ["inline-style-parser@0.2.3", "", {}, "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g=="], + "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], @@ -1055,7 +1187,7 @@ "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], - "is-async-function": ["is-async-function@2.0.0", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA=="], + "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], @@ -1063,9 +1195,11 @@ "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + "is-bun-module": ["is-bun-module@2.0.0", "", { "dependencies": { "semver": "^7.7.1" } }, "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ=="], + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - "is-core-module": ["is-core-module@2.13.1", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw=="], + "is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], @@ -1079,9 +1213,7 @@ "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - - "is-generator-function": ["is-generator-function@1.0.10", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A=="], + "is-generator-function": ["is-generator-function@1.1.2", "", { "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA=="], "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], @@ -1099,9 +1231,7 @@ "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], - "is-reference": ["is-reference@3.0.2", "", { "dependencies": { "@types/estree": "*" } }, "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg=="], - - "is-regex": ["is-regex@1.1.4", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg=="], + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], @@ -1119,7 +1249,7 @@ "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], - "is-weakset": ["is-weakset@2.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" } }, "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ=="], + "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], @@ -1129,9 +1259,7 @@ "jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="], - "jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], - - "jiti": ["jiti@1.21.0", "", { "bin": "bin/jiti.js" }, "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q=="], + "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], "jose": ["jose@6.2.12", "", {}, "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw=="], @@ -1143,8 +1271,6 @@ "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], @@ -1159,7 +1285,7 @@ "kysely": ["kysely@0.29.5", "", {}, "sha512-ooa+eSbBNPTo3MycPEuW5jdrxQdQwdtB3LC3h43FiXQbIry5tR0C5lDG7eealK0E4D7XjrnOP5DIUg/LyjRMYQ=="], - "language-subtag-registry": ["language-subtag-registry@0.3.22", "", {}, "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="], + "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="], "language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="], @@ -1167,25 +1293,19 @@ "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], - "lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "loader-runner": ["loader-runner@4.3.0", "", {}, "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg=="], - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "lodash.castarray": ["lodash.castarray@4.4.0", "", {}, "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q=="], - - "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], - "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], "log-symbols": ["log-symbols@7.0.1", "", { "dependencies": { "is-unicode-supported": "^2.0.0", "yoctocolors": "^2.1.1" } }, "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg=="], "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": "cli.js" }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], "lowlight": ["lowlight@3.3.0", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.0.0", "highlight.js": "~11.11.0" } }, "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ=="], @@ -1195,21 +1315,21 @@ "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], - "markdown-table": ["markdown-table@3.0.3", "", {}, "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw=="], + "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], "marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA=="], + "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], - "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA=="], + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], - "mdast-util-gfm": ["mdast-util-gfm@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw=="], + "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], - "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg=="], + "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], - "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ=="], + "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], @@ -1219,45 +1339,43 @@ "mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="], - "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw=="], + "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="], - "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.1.2", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-remove-position": "^5.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA=="], + "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="], "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], - "mdast-util-to-hast": ["mdast-util-to-hast@13.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA=="], + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], - "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ=="], + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], - "micromark": ["micromark@4.0.0", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ=="], + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], - "micromark-core-commonmark": ["micromark-core-commonmark@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA=="], + "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], - "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg=="], + "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], - "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.0.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg=="], + "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], - "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.0.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw=="], + "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], - "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.0.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw=="], + "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], - "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw=="], + "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], - "micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ=="], + "micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q=="], - "micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.0", "", { "dependencies": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w=="], + "micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.2", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ=="], "micromark-extension-mdx-md": ["micromark-extension-mdx-md@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ=="], @@ -1265,49 +1383,49 @@ "micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="], - "micromark-factory-destination": ["micromark-factory-destination@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA=="], + "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], - "micromark-factory-label": ["micromark-factory-label@2.0.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw=="], + "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], - "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg=="], + "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ=="], - "micromark-factory-space": ["micromark-factory-space@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg=="], + "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], - "micromark-factory-title": ["micromark-factory-title@2.0.0", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A=="], + "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], - "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.0", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA=="], + "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], - "micromark-util-character": ["micromark-util-character@2.1.0", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ=="], + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], - "micromark-util-chunked": ["micromark-util-chunked@2.0.0", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg=="], + "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], - "micromark-util-classify-character": ["micromark-util-classify-character@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw=="], + "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], - "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.0", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ=="], + "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], - "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ=="], + "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], - "micromark-util-decode-string": ["micromark-util-decode-string@2.0.0", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA=="], + "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], - "micromark-util-encode": ["micromark-util-encode@2.0.0", "", {}, "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA=="], + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], - "micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.2", "", { "dependencies": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA=="], + "micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg=="], - "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.0", "", {}, "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw=="], + "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], - "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.0", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w=="], + "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], - "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA=="], + "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], - "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw=="], + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], - "micromark-util-subtokenize": ["micromark-util-subtokenize@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q=="], + "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], - "micromark-util-symbol": ["micromark-util-symbol@2.0.0", "", {}, "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw=="], + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], - "micromark-util-types": ["micromark-util-types@2.0.0", "", {}, "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w=="], + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], - "micromatch": ["micromatch@4.0.5", "", { "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA=="], + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], @@ -1325,7 +1443,7 @@ "motion-utils": ["motion-utils@12.39.0", "", {}, "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ=="], - "ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], @@ -1333,12 +1451,12 @@ "nanostores": ["nanostores@1.5.3", "", {}, "sha512-rQLB6eV4f2AW/n3L0JmwCROpaisYy9EDEADvEFSd1C/qG8hB6O5TPlh9A791JRbJr4CnMQBzptDcvD9OR1+6WA=="], + "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], "negotiator": ["negotiator@1.1.0", "", { "dependencies": { "content-type": "^2.1.0" } }, "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg=="], - "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], - "next": ["next@16.1.1", "", { "dependencies": { "@next/env": "16.1.1", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.1", "@next/swc-darwin-x64": "16.1.1", "@next/swc-linux-arm64-gnu": "16.1.1", "@next/swc-linux-arm64-musl": "16.1.1", "@next/swc-linux-x64-gnu": "16.1.1", "@next/swc-linux-x64-musl": "16.1.1", "@next/swc-win32-arm64-msvc": "16.1.1", "@next/swc-win32-x64-msvc": "16.1.1", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-QI+T7xrxt1pF6SQ/JYFz95ro/mg/1Znk5vBebsWwbpejj1T0A23hO7GYEaVac9QUOT2BIMiuzm0L99ooq7k0/w=="], "next-intl": ["next-intl@4.14.2", "", { "dependencies": { "@eloqnt/config": "^0.1.0", "@eloqnt/format-json": "^0.1.0", "@eloqnt/format-po": "^0.1.0", "@formatjs/intl-localematcher": "^0.8.1", "@parcel/watcher": "^2.4.1", "@swc/core": "~1.16.0", "icu-minify": "^4.14.2", "negotiator": "^1.0.0", "next-intl-swc-plugin-extractor": "4.14.2", "use-intl": "^4.14.2" }, "peerDependencies": { "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" } }, "sha512-rIq8me1uOa2qXnttJ6dUGYnHHL63Rh1FAIIDTJP5av5KSBmUzNBS17QAi07QDrUMY6KxFNeoCTRzSZRPUc97lg=="], @@ -1351,9 +1469,11 @@ "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], + "node-exports-info": ["node-exports-info@1.6.2", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag=="], + "node-mock-http": ["node-mock-http@1.0.5", "", {}, "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw=="], - "node-releases": ["node-releases@2.0.14", "", {}, "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="], + "node-releases": ["node-releases@2.0.54", "", {}, "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ=="], "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], @@ -1367,7 +1487,7 @@ "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - "object.assign": ["object.assign@4.1.5", "", { "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ=="], + "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="], @@ -1379,7 +1499,7 @@ "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], - "optionator": ["optionator@0.9.3", "", { "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0" } }, "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg=="], + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], @@ -1409,8 +1529,6 @@ "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], - "periscopic": ["periscopic@3.1.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^3.0.0", "is-reference": "^3.0.0" } }, "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw=="], - "pg": ["pg@8.23.0", "", { "dependencies": { "pg-connection-string": "^2.14.0", "pg-pool": "^3.14.0", "pg-protocol": "^1.16.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.4.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-Ip2EQCngowJLGOfCwkFhPXU7/ljlhn6Rxlmy4XYfL2Y+vyRM59+8uR2xqRWKdYmbXmxCFOAmKxBuSUCdF34qLg=="], "pg-cloudflare": ["pg-cloudflare@1.4.0", "", {}, "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A=="], @@ -1429,13 +1547,11 @@ "phenomenon": ["phenomenon@1.6.0", "", {}, "sha512-7h9/fjPD3qNlgggzm88cY58l9sudZ6Ey+UmZsizfhtawO6E3srZQXywaNm2lBwT72TbpHYRPy7ytIHeBUD/G0A=="], - "picocolors": ["picocolors@1.0.1", "", {}, "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], - "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], - - "pirates": ["pirates@4.0.6", "", {}, "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg=="], + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], "pkg-types": ["pkg-types@2.3.3", "", { "dependencies": { "confbox": "^0.3.1", "exsolve": "^1.1.1", "pathe": "^2.0.3" } }, "sha512-j/lCFdcppV0JxWpCEITdbDltBxPP6cHT+yNJ6Go2OgoSA9518X847X9z0p6LtA4Nc16+eQzCZjRrWanTGvHJ5w=="], @@ -1449,21 +1565,21 @@ "po-parser": ["po-parser@2.2.0", "", {}, "sha512-NdTrKgh0oO7+y+RFX8KKhOB438x/j94UGXEFzl/7pHH0JjWSn42iJ9tgmPksIO6n1JKDHmNDcejPJfKspljB9g=="], - "possible-typed-array-names": ["possible-typed-array-names@1.0.0", "", {}, "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q=="], + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], "postal-mime": ["postal-mime@2.7.5", "", {}, "sha512-GNEXKvWFQnbgO5NlrGzVa0FmWzBZ24PersAWErttSg1Hjpf0ATxTwS5DOMGaOpTG6bUh5cTr7xi0jAD942wCJA=="], - "postcss": ["postcss@8.4.38", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.2.0" } }, "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A=="], + "postcss": ["postcss@8.5.28", "", { "dependencies": { "nanoid": "^3.3.18", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A=="], "postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], - "postcss-js": ["postcss-js@4.0.1", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw=="], + "postcss-js": ["postcss-js@4.1.0", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw=="], - "postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + "postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="], - "postcss-nested": ["postcss-nested@6.0.1", "", { "dependencies": { "postcss-selector-parser": "^6.0.11" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ=="], + "postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="], - "postcss-selector-parser": ["postcss-selector-parser@6.0.16", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw=="], + "postcss-selector-parser": ["postcss-selector-parser@6.1.4", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ=="], "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], @@ -1481,13 +1597,13 @@ "prettier": ["prettier@3.9.6", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g=="], - "prismjs": ["prismjs@1.29.0", "", {}, "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q=="], + "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], - "property-information": ["property-information@6.5.0", "", {}, "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig=="], + "property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], @@ -1495,17 +1611,15 @@ "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], - "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], - "react": ["react@19.2.8", "", {}, "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw=="], "react-dom": ["react-dom@19.2.8", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.8" } }, "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ=="], "react-email": ["react-email@4.3.2", "", { "dependencies": { "@babel/parser": "^7.27.0", "@babel/traverse": "^7.27.0", "chokidar": "^4.0.3", "commander": "^13.0.0", "debounce": "^2.0.0", "esbuild": "^0.25.0", "glob": "^11.0.0", "jiti": "2.4.2", "log-symbols": "^7.0.0", "mime-types": "^3.0.0", "normalize-path": "^3.0.0", "nypm": "0.6.0", "ora": "^8.0.0", "prompts": "2.4.2", "socket.io": "^4.8.1", "tsconfig-paths": "4.2.0" }, "bin": { "email": "dist/index.js" } }, "sha512-WaZcnv9OAIRULY236zDRdk+8r511ooJGH5UOb7FnVsV33hGPI+l5aIZ6drVjXi4QrlLTmLm8PsYvmXRSv31MPA=="], - "react-hook-form": ["react-hook-form@7.51.5", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18" } }, "sha512-J2ILT5gWx1XUIJRETiA7M19iXHlG74+6O3KApzvqB/w8S5NQR7AbU8HVZrMALdmDgWpRPYiZJl0zx8Z4L2mP6Q=="], + "react-hook-form": ["react-hook-form@7.87.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-zhFzWvLxNHH+8839OnZcUxgMZw88ah2jZWDWvKWgF3Tpbnd0vKL+dlcuU3nZVWESZQjd81EW8K+wU+cYfYAc0w=="], - "react-icons": ["react-icons@5.2.1", "", { "peerDependencies": { "react": "*" } }, "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw=="], + "react-icons": ["react-icons@5.7.0", "", { "peerDependencies": { "react": "*" } }, "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw=="], "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], @@ -1515,35 +1629,43 @@ "react-wrap-balancer": ["react-wrap-balancer@1.1.1", "", { "peerDependencies": { "react": ">=16.8.0 || ^17.0.0 || ^18" } }, "sha512-AB+l7FPRWl6uZ28VcJ8skkwLn2+UC62bjiw8tQUrZPlEWDVnR9MG0lghyn7EyxuJSsFEpht4G+yh2WikEqQ/5Q=="], - "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], + "read-cache": ["read-cache@1.0.2", "", {}, "sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA=="], "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], "reading-time": ["reading-time@1.5.0", "", {}, "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg=="], + "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], + + "recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="], + + "recma-parse": ["recma-parse@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ=="], + + "recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="], + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], "refractor": ["refractor@3.6.0", "", { "dependencies": { "hastscript": "^6.0.0", "parse-entities": "^2.0.0", "prismjs": "~1.27.0" } }, "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA=="], - "regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], - "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], "rehype-highlight": ["rehype-highlight@7.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-text": "^4.0.0", "lowlight": "^3.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA=="], - "remark-gfm": ["remark-gfm@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA=="], + "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="], - "remark-mdx": ["remark-mdx@3.0.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA=="], + "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], + + "remark-mdx": ["remark-mdx@3.1.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg=="], "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], - "remark-rehype": ["remark-rehype@11.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g=="], + "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], "resend": ["resend@6.26.0", "", { "dependencies": { "postal-mime": "2.7.5", "standardwebhooks": "1.0.0" }, "peerDependencies": { "@react-email/render": "*" }, "optionalPeers": ["@react-email/render"] }, "sha512-vkrULozV5nGF8o7tyun/t0+qFgtPpn+cyRhVqeorhOsPUNDiSc/9p/pn8AprdHqJpYaTvftpnQgWurW++FkCdw=="], - "resolve": ["resolve@1.22.8", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw=="], + "resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], @@ -1551,7 +1673,7 @@ "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], - "reusify": ["reusify@1.0.4", "", {}, "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="], + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], "rou3": ["rou3@0.9.2", "", {}, "sha512-3SOzvaAg8rkHrXtRjpCvCvbyO5to9oOO27Z/XqHEYXfMRVSw/qMIVdmaOk9W2lcRLtR6dlqTjo9hDeJk70QBYQ=="], @@ -1559,22 +1681,16 @@ "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="], - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], - "safe-regex-test": ["safe-regex-test@1.0.3", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-regex": "^1.1.4" } }, "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw=="], + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], - "schema-utils": ["schema-utils@3.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg=="], - "selderee": ["selderee@0.11.0", "", { "dependencies": { "parseley": "^0.12.0" } }, "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA=="], "semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], - "set-cookie-parser": ["set-cookie-parser@3.1.2", "", {}, "sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw=="], "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], @@ -1601,6 +1717,16 @@ "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + "site-ai-stack": ["site-ai-stack@workspace:sites/ai-stack"], + + "site-devai-tools": ["site-devai-tools@workspace:sites/devai-tools"], + + "site-findai": ["site-findai@workspace:sites/findai"], + + "site-launchai": ["site-launchai@workspace:sites/launchai"], + + "site-the-ai-ledger": ["site-the-ai-ledger@workspace:sites/the-ai-ledger"], + "socket.io": ["socket.io@4.8.3", "", { "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.4.1", "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } }, "sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A=="], "socket.io-adapter": ["socket.io-adapter@2.5.8", "", { "dependencies": { "debug": "~4.4.1", "ws": "~8.21.0" } }, "sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw=="], @@ -1609,9 +1735,9 @@ "sonner": ["sonner@2.0.8", "", { "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-UM/ByIoFra8yzV75n1o0Puu0bw5U/9UNnDacrJNspekBewIfsQ3D6ez1nvlWpt7aTsO6rujQtifBpycwIivqlg=="], - "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - "source-map-js": ["source-map-js@1.2.0", "", {}, "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg=="], + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], @@ -1619,6 +1745,8 @@ "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="], + "standardwebhooks": ["standardwebhooks@1.0.0", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "fast-sha256": "^1.3.0" } }, "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg=="], "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], @@ -1627,8 +1755,6 @@ "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "string.prototype.includes": ["string.prototype.includes@2.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" } }, "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg=="], "string.prototype.matchall": ["string.prototype.matchall@4.1.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.2", "get-intrinsic": "^1.3.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.4", "set-function-name": "^2.0.2", "side-channel": "^1.1.1" } }, "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ=="], @@ -1643,33 +1769,27 @@ "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], - "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - - "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "style-to-object": ["style-to-object@1.0.6", "", { "dependencies": { "inline-style-parser": "0.2.3" } }, "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA=="], + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], + + "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "@babel/core": "*", "babel-plugin-macros": "*", "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" }, "optionalPeers": ["@babel/core", "babel-plugin-macros"] }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], - "sucrase": ["sucrase@3.35.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA=="], + "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "tailwind-merge": ["tailwind-merge@2.3.0", "", { "dependencies": { "@babel/runtime": "^7.24.1" } }, "sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA=="], + "tailwind-merge": ["tailwind-merge@2.6.1", "", {}, "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ=="], - "tailwindcss": ["tailwindcss@3.4.3", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", "postcss": "^8.4.23", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.1", "postcss-nested": "^6.0.1", "postcss-selector-parser": "^6.0.11", "resolve": "^1.22.2", "sucrase": "^3.32.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A=="], - - "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], - - "terser": ["terser@5.31.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": "bin/terser" }, "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg=="], - - "terser-webpack-plugin": ["terser-webpack-plugin@5.3.10", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", "terser": "^5.26.0" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w=="], + "tailwindcss": ["tailwindcss@3.4.19", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ=="], "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], @@ -1705,7 +1825,7 @@ "typed-array-length": ["typed-array-length@1.0.8", "", { "dependencies": { "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "possible-typed-array-names": "^1.1.0", "reflect.getprototypeof": "^1.0.10" } }, "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g=="], - "typescript": ["typescript@5.4.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "typescript-eslint": ["typescript-eslint@8.70.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.70.0", "@typescript-eslint/parser": "8.70.0", "@typescript-eslint/typescript-estree": "8.70.0", "@typescript-eslint/utils": "8.70.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-P/W5cz70/cQAuKfY3xwQMWWTV7BvJ0mAQmi+9mBcsVPaBUpd6Ohpa+fECv9rBFrQcig86jAiNBFNWUqnTjr4pw=="], @@ -1715,9 +1835,9 @@ "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], - "undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - "unified": ["unified@11.0.4", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ=="], + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], @@ -1727,15 +1847,15 @@ "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], - "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], - "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], "unist-util-visit": ["unist-util-visit@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" } }, "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q=="], "unist-util-visit-parents": ["unist-util-visit-parents@3.1.1", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" } }, "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg=="], - "update-browserslist-db": ["update-browserslist-db@1.0.16", "", { "dependencies": { "escalade": "^3.1.2", "picocolors": "^1.0.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ=="], + "unrs-resolver": ["unrs-resolver@1.12.2", "", { "dependencies": { "napi-postinstall": "^0.3.4" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.12.2", "@unrs/resolver-binding-android-arm64": "1.12.2", "@unrs/resolver-binding-darwin-arm64": "1.12.2", "@unrs/resolver-binding-darwin-x64": "1.12.2", "@unrs/resolver-binding-freebsd-x64": "1.12.2", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", "@unrs/resolver-binding-linux-x64-musl": "1.12.2", "@unrs/resolver-binding-openharmony-arm64": "1.12.2", "@unrs/resolver-binding-wasm32-wasi": "1.12.2", "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" } }, "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ=="], + + "update-browserslist-db": ["update-browserslist-db@1.3.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw=="], "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], @@ -1747,17 +1867,11 @@ "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - "vfile": ["vfile@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw=="], + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], - "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - "watchpack": ["watchpack@2.4.1", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg=="], - - "webpack": ["webpack@5.91.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": "bin/webpack.js" }, "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw=="], - - "webpack-sources": ["webpack-sources@3.2.3", "", {}, "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="], - - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], @@ -1767,9 +1881,7 @@ "which-typed-array": ["which-typed-array@1.1.22", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw=="], - "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - - "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], "ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], @@ -1777,13 +1889,11 @@ "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - "yaml": ["yaml@2.4.1", "", { "bin": "bin.mjs" }, "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg=="], - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], "yoctocolors": ["yoctocolors@2.2.0", "", {}, "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg=="], - "zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="], @@ -1791,21 +1901,11 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@babel/code-frame/picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - - "@babel/core/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "@babel/core/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - - "@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - - "@babel/helper-compilation-targets/browserslist": ["browserslist@4.28.9", "", { "dependencies": { "baseline-browser-mapping": "^2.11.20", "caniuse-lite": "^1.0.30001810", "electron-to-chromium": "^1.5.420", "node-releases": "^2.0.54", "update-browserslist-db": "^1.3.2" }, "bin": { "browserslist": "cli.js" } }, "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], - "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@better-auth/core/@better-fetch/fetch": ["@better-fetch/fetch@1.3.1", "", {}, "sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g=="], @@ -1817,70 +1917,36 @@ "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@eslint/config-array/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "@eslint/eslintrc/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], - "@jridgewell/remapping/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - - "@jridgewell/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - - "@mdx-js/mdx/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "@mdx-js/mdx/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + "@mdx-js/mdx/unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], "@parcel/watcher/picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], - "@react-email/code-block/prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], - "@tailwindcss/typography/postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="], - "@types/acorn/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + "@types/cors/@types/node": ["@types/node@26.5.0", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A=="], - "@types/eslint/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + "@types/hast/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "@types/eslint-scope/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + "@types/mdast/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "@types/estree-jsx/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "@types/hast/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "@types/mdast/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "@types/ws/@types/node": ["@types/node@26.5.0", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A=="], "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.9", "", {}, "sha512-brTTsvFRt5C1gGHtPst/281UjPD5t9fBqbgoMPlVWy11ZLTPfu7HxK4ZYqO9H7o/yC9rSTCI85EaQ4OoY12qYw=="], - "@typescript-eslint/parser/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "@typescript-eslint/project-service/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "@typescript-eslint/type-utils/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "@typescript-eslint/typescript-estree/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + "@unrs/resolver-binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + "accepts/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], "accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], - "array.prototype.findlast/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "array.prototype.findlast/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], - - "array.prototype.findlast/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], - - "array.prototype.findlast/es-shim-unscopables": ["es-shim-unscopables@1.0.2", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw=="], - - "array.prototype.flat/es-shim-unscopables": ["es-shim-unscopables@1.0.2", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw=="], - - "array.prototype.flatmap/es-shim-unscopables": ["es-shim-unscopables@1.0.2", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw=="], - "better-auth/@better-fetch/fetch": ["@better-fetch/fetch@1.3.1", "", {}, "sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g=="], "better-auth/zod": ["zod@4.5.4", "", {}, "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA=="], @@ -1889,81 +1955,43 @@ "better-call/@better-fetch/fetch": ["@better-fetch/fetch@1.3.1", "", {}, "sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g=="], - "bun-types/@types/node": ["@types/node@25.9.5", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg=="], + "bun-types/@types/node": ["@types/node@26.5.0", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A=="], "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "class-variance-authority/clsx": ["clsx@2.0.0", "", {}, "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q=="], - "decode-named-character-reference/character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], - "define-data-property/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "define-data-property/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], - "drizzle-kit/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], - "engine.io/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "es-abstract/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - - "es-abstract/is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "es-abstract/object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], - - "es-abstract/safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - - "es-set-tostringtag/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - - "es-shim-unscopables/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + "engine.io/@types/node": ["@types/node@26.5.0", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A=="], "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "eslint-import-resolver-node/resolve": ["resolve@2.0.0-next.7", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.2", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ=="], + "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - "eslint-plugin-import/eslint-module-utils": ["eslint-module-utils@2.14.0", "", { "dependencies": { "debug": "^3.2.7" }, "peerDependencies": { "eslint": "*" }, "optionalPeers": ["eslint"] }, "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig=="], - - "eslint-plugin-import/is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], - - "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], - "eslint-plugin-react/resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], + "eslint-plugin-react/resolve": ["resolve@2.0.0-next.7", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.2", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ=="], - "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "eslint-plugin-react-hooks/zod": ["zod@4.5.4", "", {}, "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA=="], - "estree-util-attach-comments/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "estree-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "estree-walker/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + "estree-util-visit/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "function.prototype.name/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - - "get-intrinsic/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - "glob/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], - "has-property-descriptors/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + "hast-util-to-jsx-runtime/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "has-tostringtag/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "hast-util-to-estree/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "hast-util-to-estree/style-to-object": ["style-to-object@0.4.4", "", { "dependencies": { "inline-style-parser": "0.1.1" } }, "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg=="], - - "hast-util-to-jsx-runtime/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "hast-util-to-jsx-runtime/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "hast-util-to-text/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "hast-util-to-text/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], "hastscript/@types/hast": ["@types/hast@2.3.10", "", { "dependencies": { "@types/unist": "^2" } }, "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw=="], @@ -1973,87 +2001,39 @@ "hastscript/space-separated-tokens": ["space-separated-tokens@1.1.5", "", {}, "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA=="], - "internal-slot/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - - "is-reference/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "is-regex/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "is-symbol/safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - - "is-weakset/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "is-weakset/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - - "jsx-ast-utils/array-includes": ["array-includes@3.1.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" } }, "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ=="], - - "jsx-ast-utils/array.prototype.flat": ["array.prototype.flat@1.3.2", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA=="], - - "jsx-ast-utils/object.values": ["object.values@1.2.0", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ=="], - "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - "mdast-util-find-and-replace/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + "mdast-util-find-and-replace/unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "mdast-util-find-and-replace/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + "mdast-util-find-and-replace/unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - "mdast-util-from-markdown/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "mdast-util-from-markdown/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "mdast-util-mdx-jsx/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "mdast-util-mdx-jsx/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "mdast-util-mdx-jsx/parse-entities": ["parse-entities@4.0.1", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w=="], + "mdast-util-mdx-jsx/parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], - "mdast-util-phrasing/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + "mdast-util-phrasing/unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "mdast-util-to-hast/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + "mdast-util-to-hast/unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], - "mdast-util-to-markdown/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "mdast-util-to-markdown/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "mdast-util-to-markdown/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + "mdast-util-to-markdown/unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], - "micromark-extension-mdx-expression/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "micromark-extension-mdx-jsx/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "micromark-extension-mdxjs/acorn": ["acorn@8.11.3", "", { "bin": "bin/acorn" }, "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="], - - "micromark-extension-mdxjs-esm/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "micromark-factory-mdx-expression/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "micromark-util-events-to-acorn/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "micromark-util-events-to-acorn/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "micromark-util-events-to-acorn/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], - "object.assign/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "object.assign/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "object.fromentries/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "object.fromentries/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], - - "object.fromentries/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], - - "object.groupby/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "object.groupby/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], + "node-exports-info/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "ora/log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], - "periscopic/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - "png-to-ico/@types/node": ["@types/node@25.9.5", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg=="], - "postcss/nanoid": ["nanoid@3.3.7", "", { "bin": "bin/nanoid.cjs" }, "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="], - - "postcss-load-config/lilconfig": ["lilconfig@3.1.1", "", {}, "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ=="], + "postcss/nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="], "react-email/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], @@ -2061,111 +2041,39 @@ "react-email/jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], - "react-markdown/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + "react-markdown/unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], "react-promise-suspense/fast-deep-equal": ["fast-deep-equal@2.0.1", "", {}, "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w=="], "refractor/prismjs": ["prismjs@1.27.0", "", {}, "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA=="], - "rehype-highlight/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - - "safe-regex-test/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "schema-utils/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - - "set-function-length/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "set-function-length/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], - - "socket.io/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "socket.io-adapter/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "socket.io-parser/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "rehype-highlight/unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "string.prototype.trim/safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - - "string.prototype.trimstart/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "string.prototype.trimstart/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], - "stringify-entities/character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], - "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], - "sucrase/glob": ["glob@10.3.10", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": "dist/esm/bin.mjs" }, "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g=="], - - "terser/acorn": ["acorn@8.11.3", "", { "bin": "bin/acorn" }, "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="], - - "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - "tinyglobby/picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], - "typed-array-length/for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + "unified/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "typed-array-length/possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + "unist-util-find-after/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "unified/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "unist-util-find-after/unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "unist-util-find-after/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "unist-util-position/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "unist-util-find-after/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + "unist-util-position-from-estree/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "unist-util-position/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "unist-util-stringify-position/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "unist-util-position-from-estree/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "vfile/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "unist-util-remove-position/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "unist-util-remove-position/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - - "unist-util-stringify-position/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "vfile/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "vfile-message/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "webpack/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], - - "webpack/acorn": ["acorn@8.11.3", "", { "bin": "bin/acorn" }, "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="], - - "webpack/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], - - "webpack/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "which-builtin-type/is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "which-typed-array/for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], - - "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - - "wrap-ansi/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - - "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "@babel/core/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "@babel/generator/@jridgewell/gen-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], - - "@babel/helper-compilation-targets/browserslist/caniuse-lite": ["caniuse-lite@1.0.30001810", "", {}, "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg=="], - - "@babel/helper-compilation-targets/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.423", "", {}, "sha512-rRZfTSY8ptHYMQxa+uIycJMFKmY1T0GIApNMXJYGehguTZa56TEEl19pKPCoBqk5Gpf7QizZn/jt7xur+DYxag=="], - - "@babel/helper-compilation-targets/browserslist/node-releases": ["node-releases@2.0.54", "", {}, "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ=="], - - "@babel/helper-compilation-targets/browserslist/update-browserslist-db": ["update-browserslist-db@1.3.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw=="], + "vfile-message/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], @@ -2211,107 +2119,23 @@ "@esbuild-kit/core-utils/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], - "@eslint/config-array/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "@mdx-js/mdx/unist-util-visit/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "@eslint/eslintrc/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "@mdx-js/mdx/unist-util-visit/unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "@jridgewell/remapping/@jridgewell/gen-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], - - "@mdx-js/mdx/unist-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "@mdx-js/mdx/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], - - "@mdx-js/mdx/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + "@mdx-js/mdx/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], "@next/eslint-plugin-next/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "@typescript-eslint/parser/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "@types/cors/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="], - "@typescript-eslint/project-service/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "@typescript-eslint/type-utils/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "@typescript-eslint/typescript-estree/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "@types/ws/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="], "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], "accepts/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - "array.prototype.findlast/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "array.prototype.findlast/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "array.prototype.findlast/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], - - "array.prototype.findlast/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], - - "array.prototype.findlast/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], - - "array.prototype.findlast/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], - - "array.prototype.findlast/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], - - "array.prototype.findlast/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "array.prototype.findlast/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], - - "array.prototype.findlast/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], - - "array.prototype.findlast/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], - - "array.prototype.findlast/es-abstract/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "array.prototype.findlast/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], - - "array.prototype.findlast/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], - - "array.prototype.findlast/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], - - "array.prototype.findlast/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "array.prototype.findlast/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "array.prototype.findlast/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], - - "array.prototype.findlast/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], - - "array.prototype.findlast/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], - - "array.prototype.findlast/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], - - "array.prototype.findlast/es-abstract/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], - - "array.prototype.findlast/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], - - "array.prototype.findlast/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], - - "array.prototype.findlast/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], - - "array.prototype.findlast/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], - - "array.prototype.findlast/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], - - "array.prototype.findlast/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], - - "array.prototype.findlast/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], - - "array.prototype.findlast/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], - - "array.prototype.findlast/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], - - "array.prototype.findlast/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], - - "array.prototype.findlast/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], - - "array.prototype.findlast/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], - - "array.prototype.findlast/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], - - "bun-types/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], - - "define-data-property/es-define-property/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "define-data-property/gopd/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + "bun-types/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="], "drizzle-kit/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], @@ -2365,57 +2189,17 @@ "drizzle-kit/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], - "engine.io/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "engine.io/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="], - "eslint-plugin-import/is-core-module/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - - "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": "lib/cli.js" }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], "glob/minimatch/brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], - "has-property-descriptors/es-define-property/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + "mdast-util-find-and-replace/unist-util-is/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "hast-util-to-estree/style-to-object/inline-style-parser": ["inline-style-parser@0.1.1", "", {}, "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="], + "mdast-util-find-and-replace/unist-util-visit-parents/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "is-regex/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "is-regex/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "is-symbol/safe-regex-test/is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "is-weakset/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "is-weakset/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "is-weakset/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "jsx-ast-utils/array-includes/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "jsx-ast-utils/array-includes/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], - - "jsx-ast-utils/array-includes/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], - - "jsx-ast-utils/array-includes/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "jsx-ast-utils/array-includes/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], - - "jsx-ast-utils/array.prototype.flat/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], - - "jsx-ast-utils/array.prototype.flat/es-shim-unscopables": ["es-shim-unscopables@1.0.2", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw=="], - - "jsx-ast-utils/object.values/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], - - "jsx-ast-utils/object.values/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], - - "mdast-util-find-and-replace/unist-util-is/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "mdast-util-find-and-replace/unist-util-visit-parents/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], - - "mdast-util-mdx-jsx/parse-entities/@types/unist": ["@types/unist@2.0.10", "", {}, "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="], - - "mdast-util-mdx-jsx/parse-entities/character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + "mdast-util-mdx-jsx/parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], "mdast-util-mdx-jsx/parse-entities/character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], @@ -2427,165 +2211,19 @@ "mdast-util-mdx-jsx/parse-entities/is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], - "mdast-util-phrasing/unist-util-is/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "mdast-util-phrasing/unist-util-is/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "mdast-util-to-hast/unist-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "mdast-util-to-hast/unist-util-visit/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "mdast-util-to-hast/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + "mdast-util-to-hast/unist-util-visit/unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "mdast-util-to-hast/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + "mdast-util-to-hast/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - "mdast-util-to-markdown/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + "mdast-util-to-markdown/unist-util-visit/unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "mdast-util-to-markdown/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + "mdast-util-to-markdown/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - "next/postcss/nanoid": ["nanoid@3.3.7", "", { "bin": "bin/nanoid.cjs" }, "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="], - - "object.assign/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "object.assign/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "object.fromentries/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "object.fromentries/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "object.fromentries/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], - - "object.fromentries/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], - - "object.fromentries/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], - - "object.fromentries/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], - - "object.fromentries/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], - - "object.fromentries/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "object.fromentries/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], - - "object.fromentries/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], - - "object.fromentries/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], - - "object.fromentries/es-abstract/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "object.fromentries/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], - - "object.fromentries/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], - - "object.fromentries/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], - - "object.fromentries/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "object.fromentries/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "object.fromentries/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], - - "object.fromentries/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], - - "object.fromentries/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], - - "object.fromentries/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], - - "object.fromentries/es-abstract/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], - - "object.fromentries/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], - - "object.fromentries/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], - - "object.fromentries/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], - - "object.fromentries/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], - - "object.fromentries/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], - - "object.fromentries/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], - - "object.fromentries/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], - - "object.fromentries/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], - - "object.fromentries/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], - - "object.fromentries/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], - - "object.fromentries/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], - - "object.fromentries/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], - - "object.fromentries/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], - - "object.groupby/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "object.groupby/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "object.groupby/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], - - "object.groupby/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], - - "object.groupby/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], - - "object.groupby/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], - - "object.groupby/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], - - "object.groupby/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "object.groupby/es-abstract/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], - - "object.groupby/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], - - "object.groupby/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], - - "object.groupby/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], - - "object.groupby/es-abstract/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "object.groupby/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], - - "object.groupby/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], - - "object.groupby/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], - - "object.groupby/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "object.groupby/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "object.groupby/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], - - "object.groupby/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], - - "object.groupby/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], - - "object.groupby/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], - - "object.groupby/es-abstract/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], - - "object.groupby/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], - - "object.groupby/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], - - "object.groupby/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], - - "object.groupby/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], - - "object.groupby/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], - - "object.groupby/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], - - "object.groupby/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], - - "object.groupby/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], - - "object.groupby/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], - - "object.groupby/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], - - "object.groupby/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], - - "object.groupby/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], - - "object.groupby/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], + "next/postcss/nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="], "ora/log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], @@ -2645,356 +2283,22 @@ "react-email/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], - "react-markdown/unist-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "react-markdown/unist-util-visit/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "react-markdown/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + "react-markdown/unist-util-visit/unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "react-markdown/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + "react-markdown/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - "rehype-highlight/unist-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "rehype-highlight/unist-util-visit/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "rehype-highlight/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + "rehype-highlight/unist-util-visit/unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "rehype-highlight/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], - - "safe-regex-test/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "safe-regex-test/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "set-function-length/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "set-function-length/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "socket.io-adapter/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "socket.io-parser/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "socket.io/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "string.prototype.trim/safe-regex-test/is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "string.prototype.trimstart/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "string.prototype.trimstart/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "sucrase/glob/foreground-child": ["foreground-child@3.1.1", "", { "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" } }, "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg=="], - - "sucrase/glob/jackspeak": ["jackspeak@2.3.6", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ=="], - - "sucrase/glob/minimatch": ["minimatch@9.0.4", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw=="], - - "sucrase/glob/minipass": ["minipass@7.0.4", "", {}, "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ=="], - - "sucrase/glob/path-scurry": ["path-scurry@1.10.2", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA=="], - - "unist-util-remove-position/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], - - "unist-util-remove-position/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], - - "webpack/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], - - "webpack/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "which-builtin-type/is-regex/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - - "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "@babel/helper-compilation-targets/browserslist/update-browserslist-db/escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - - "@babel/helper-compilation-targets/browserslist/update-browserslist-db/picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + "rehype-highlight/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "array.prototype.findlast/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "array.prototype.findlast/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "array.prototype.findlast/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], - - "array.prototype.findlast/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "array.prototype.findlast/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], - - "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], - - "define-data-property/es-define-property/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "define-data-property/es-define-property/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "define-data-property/gopd/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "define-data-property/gopd/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "has-property-descriptors/es-define-property/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "has-property-descriptors/es-define-property/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "is-regex/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "is-regex/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "is-symbol/safe-regex-test/is-regex/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - - "jsx-ast-utils/array-includes/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "jsx-ast-utils/array-includes/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], - - "jsx-ast-utils/array-includes/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], - - "jsx-ast-utils/array-includes/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], - - "jsx-ast-utils/array-includes/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], - - "jsx-ast-utils/array-includes/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], - - "jsx-ast-utils/array-includes/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "jsx-ast-utils/array-includes/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], - - "jsx-ast-utils/array-includes/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], - - "jsx-ast-utils/array-includes/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], - - "jsx-ast-utils/array-includes/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], - - "jsx-ast-utils/array-includes/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], - - "jsx-ast-utils/array-includes/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], - - "jsx-ast-utils/array-includes/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "jsx-ast-utils/array-includes/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "jsx-ast-utils/array-includes/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], - - "jsx-ast-utils/array-includes/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], - - "jsx-ast-utils/array-includes/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], - - "jsx-ast-utils/array-includes/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], - - "jsx-ast-utils/array-includes/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], - - "jsx-ast-utils/array-includes/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], - - "jsx-ast-utils/array-includes/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], - - "jsx-ast-utils/array-includes/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], - - "jsx-ast-utils/array-includes/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], - - "jsx-ast-utils/array-includes/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], - - "jsx-ast-utils/array-includes/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], - - "jsx-ast-utils/array-includes/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], - - "jsx-ast-utils/array-includes/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], - - "jsx-ast-utils/array-includes/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], - - "jsx-ast-utils/array-includes/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], - - "jsx-ast-utils/array-includes/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], - - "jsx-ast-utils/array-includes/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], - - "jsx-ast-utils/array-includes/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "jsx-ast-utils/array-includes/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "jsx-ast-utils/array.prototype.flat/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "jsx-ast-utils/array.prototype.flat/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], - - "jsx-ast-utils/object.values/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], - - "jsx-ast-utils/object.values/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], - "mdast-util-mdx-jsx/parse-entities/is-alphanumerical/is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], - - "object.assign/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "object.fromentries/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "object.fromentries/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "object.fromentries/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], - - "object.fromentries/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "object.fromentries/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], - - "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], - - "object.groupby/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "object.groupby/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "object.groupby/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], - - "object.groupby/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "object.groupby/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], - - "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], - - "safe-regex-test/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "safe-regex-test/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "string.prototype.trim/safe-regex-test/is-regex/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - - "string.prototype.trimstart/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "string.prototype.trimstart/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "sucrase/glob/foreground-child/cross-spawn": ["cross-spawn@7.0.3", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="], - - "sucrase/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], - - "sucrase/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - - "sucrase/glob/path-scurry/lru-cache": ["lru-cache@10.2.0", "", {}, "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q=="], - - "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], - - "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], - - "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], - - "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "jsx-ast-utils/array-includes/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], - - "jsx-ast-utils/array-includes/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "jsx-ast-utils/array-includes/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], - - "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], - - "jsx-ast-utils/array.prototype.flat/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "jsx-ast-utils/array.prototype.flat/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], - - "jsx-ast-utils/object.values/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], - - "jsx-ast-utils/object.values/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], - - "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], - - "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], - - "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], - - "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], - - "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], - - "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "sucrase/glob/jackspeak/@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - - "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], - - "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], - - "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], - - "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], - - "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], } } diff --git a/docs/AI-Directory-Platform开发计划与技术设计文档.md b/docs/AI-Directory-Platform开发计划与技术设计文档.md new file mode 100644 index 0000000..4f5adee --- /dev/null +++ b/docs/AI-Directory-Platform开发计划与技术设计文档.md @@ -0,0 +1,3005 @@ +# AI Directory Platform +## AI 目录站系统开发底座与产品化开发计划 + +**项目定位:** 可复用 AI Directory SaaS / 开源基础平台 +**基础项目:** `coolchange-ai/toolso-ai-open` +**技术方向:** Next.js + React + TypeScript + PostgreSQL +**核心目标:** + +1. 基于现有 Toolso.AI 开源项目二次开发 +2. 建立一个可复用的 AI Directory 基础底座 +3. 支持多个不同视觉、不同定位的 AI 网站快速搭建 +4. 建立用户注册、认证、投票、评论、收藏、提交工具等社区能力 +5. 建立 SEO / Programmatic SEO 流量体系 +6. 建立工具提交、认领、审核、排名、推广等商业化能力 +7. 最终通过 5 个不同 UI / 产品形态验证底座的可复用性、稳定性和扩展性 + +--- + +# 一、产品战略 + +## 1.1 不要做成普通 AI 导航站 + +传统 AI 导航站的核心结构: + +```text +首页 + ↓ +分类 + ↓ +工具列表 + ↓ +工具详情 + ↓ +外链 +``` + +这种模式非常容易同质化。 + +本项目应该升级成: + +```text + AI Directory Platform + │ + ┌───────────────────┼───────────────────┐ + ↓ ↓ ↓ + Discovery Community Content + │ │ │ + 搜索/分类/任务 Vote/Review/收藏 Blog/Guide/SEO + │ │ │ + └───────────────────┼───────────────────┘ + ↓ + Tool / Product Data + │ + ┌─────────────┼─────────────┐ + ↓ ↓ ↓ + Ranking Analytics Monetization + │ │ │ + ↓ ↓ ↓ + 榜单系统 数据分析 推广/广告/会员 +``` + +最终目标不是: + +> “让用户看到 AI 工具。” + +而是: + +> **让用户通过搜索、任务、榜单、社区评价和内容找到最适合自己的 AI 工具。** + +--- + +# 二、底座选择 + +## 2.1 基础项目 + +直接 Fork: + +`coolchange-ai/toolso-ai-open` + +该项目当前已经包含: + +- Next.js 16 +- React 19 +- TypeScript +- Tailwind CSS +- Framer Motion +- Radix UI +- React Hook Form +- Zod +- Better Auth +- Google OAuth +- PostgreSQL +- Drizzle ORM +- Resend +- R2 / S3 +- next-intl +- Blog / MDX +- Admin Panel +- Favorites +- Light / Dark Theme + +因此不建议重新开发这些基础能力。 + +--- + +# 三、总体架构 + +建议把项目从: + +```text +Toolso.AI +``` + +升级为: + +```text +AI Directory Core +``` + +然后在 Core 上构建不同站点。 + +```text + AI Directory Core + │ + ┌───────────────────┼───────────────────┐ + │ │ │ + ↓ ↓ ↓ + Core UI Core Data Core API + │ │ │ + ├── Header ├── Tools ├── Search + ├── Cards ├── Categories ├── Vote + ├── Filters ├── Tags ├── Review + ├── Search ├── Users ├── Submit + └── Detail ├── Votes ├── Ranking + └── Reviews └── Analytics +``` + +然后: + +```text + AI Directory Core + │ + ┌─────────────────┼─────────────────┐ + ↓ ↓ ↓ + Site A Site B Site C + Directory Product Hunt Niche AI + Style Style Style + + ↓ ↓ ↓ + + Site D Site E + Minimal Editorial +``` + +--- + +# 四、设计原则 + +## 4.1 禁止 Emoji + +整个系统禁止使用: + +- Emoji +- Unicode Emoji 图标 +- 字符型图标 +- `→` +- `←` +- `✓` +- `★` +- `♥` +- `●` +- 类似字符模拟 Icon + +所有 UI 图标统一使用: + +**Lucide Icons / SVG** +- Lucide 可以通过context7 mcp搜索 +例如: + +```tsx +import { + Search, + Heart, + Star, + ArrowUp, + ChevronRight, + ExternalLink, + Plus, + Settings, +} from "lucide-react"; +``` + +图标规范: + +```text +Icon + ├── stroke-width: 1.8 ~ 2 + ├── currentColor + ├── SVG + ├── lucide-react + └── 禁止手写 Unicode 图标 +``` + +这样能够保证整个系统视觉统一。 + +--- + +# 五、设计系统 + +建立独立 Design System,而不是把 UI 写死在业务页面中。 + +## 5.1 Design Tokens + +统一: + +```text +Colors +Typography +Spacing +Radius +Shadow +Border +Motion +Breakpoints +Icon +Button +Input +Card +Badge +Dialog +Dropdown +Tabs +Pagination +``` + +例如: + +```text +--color-background +--color-foreground +--color-muted +--color-border +--color-primary +--color-secondary + +--radius-sm +--radius-md +--radius-lg +--radius-xl + +--spacing-xs +--spacing-sm +--spacing-md +--spacing-lg +--spacing-xl +``` + +--- + +# 六、主题系统 + +必须支持: + +```text +Light +Dark +System +``` + +主题切换不能只改变背景颜色。 + +需要完整适配: + +- 页面背景 +- Card +- Border +- Text +- Muted Text +- Input +- Dropdown +- Modal +- Tooltip +- Header +- Footer +- Code +- Blog +- Tool Detail +- Admin + +--- + +# 七、响应式设计 + +必须 Mobile First。 + +支持: + +```text +Mobile +Tablet +Desktop +Large Desktop +``` + +核心断点: + +```text +< 640 +640+ +768+ +1024+ +1280+ +1536+ +``` + +重点测试: + +```text +375 × 812 +390 × 844 +768 × 1024 +1280 × 800 +1440 × 900 +1920 × 1080 +``` + +--- + +# 八、核心数据模型 + +## 8.1 User + +```text +User +├── id +├── name +├── username +├── email +├── avatar +├── bio +├── role +├── status +├── createdAt +└── updatedAt +``` + +Role: + +```text +USER +EDITOR +MODERATOR +ADMIN +SUPER_ADMIN +``` + +--- + +# 九、认证系统 + +支持: + +```text +Google +GitHub +Email +``` + +后续可扩展: + +```text +Discord +X +Microsoft +Apple +``` + +Google 和 GitHub 登录属于第一阶段。 + +认证系统统一基于 Better Auth。 + +--- + +# 十、Tool 数据模型 + +核心实体: + +```text +Tool +├── id +├── slug +├── name +├── tagline +├── description +├── logo +├── websiteUrl +├── screenshots +├── video +├── categoryId +├── pricing +├── foundedAt +├── status +├── verified +├── featured +├── createdAt +└── updatedAt +``` + +--- + +# 十一、Tool 分类系统 + +不要只做: + +```text +AI Writing +AI Image +AI Video +AI Coding +``` + +应该同时支持: + +## Category + +```text +Writing +Image +Video +Audio +Coding +Marketing +Productivity +Research +Business +Education +Finance +Design +Automation +AI Agent +``` + +## Use Case + +例如: + +```text +写博客 +制作 PPT +生成 Logo +视频剪辑 +会议记录 +生成字幕 +写代码 +SEO +客户支持 +社交媒体 +市场分析 +``` + +## Audience + +```text +Developers +Designers +Marketers +Students +Creators +Founders +Researchers +Business +Enterprise +``` + +这样可以建立三维发现体系: + +```text +Category ++ +Use Case ++ +Audience +``` + +这比单纯分类更有 SEO 和产品价值。 + +--- + +# 十二、Pricing + +统一: + +```text +Free +Freemium +Free Trial +Paid +Contact +Open Source +``` + +支持: + +```text +monthlyPrice +yearlyPrice +currency +hasFreePlan +hasFreeTrial +``` + +--- + +# 十三、Tool Detail 页面 + +Tool Detail 是整个网站最重要的 SEO 页面之一。 + +建议结构: + +```text +Tool Header +├── Logo +├── Name +├── Tagline +├── Category +├── Pricing +├── Rating +├── Vote +├── Favorite +├── Visit Website +└── Share + +Overview + +Features + +Use Cases + +Pricing + +Screenshots + +Pros & Cons + +Alternatives + +User Reviews + +Related Tools + +Similar Tools + +FAQ + +Related Articles +``` + +--- + +# 十四、投票系统 + +这是整个项目非常重要的差异化功能。 + +参考 Product Hunt 的产品互动逻辑。 + +但不要简单做: + +```text +Upvote = +1 +``` + +建议建立: + +```text +Vote +├── userId +├── toolId +├── value +├── createdAt +└── source +``` + +目前: + +```text +value = 1 +``` + +以后可以扩展: + +```text +Like +Upvote +Downvote +``` + +--- + +# 十五、投票规则 + +必须登录才能投票。 + +用户: + +```text +未登录 + ↓ +点击 Vote + ↓ +Login + ↓ +完成 OAuth + ↓ +自动返回原页面 + ↓ +Vote 成功 +``` + +避免用户频繁刷票。 + +基础防刷: + +```text +User ID +IP +Cookie +Session +Rate Limit +``` + +高级防刷: + +```text +Vote velocity +Account age +IP reputation +Device fingerprint +Abnormal voting pattern +``` + +注意: + +**不要让投票数量直接决定所有排名。** + +--- + +# 十六、Ranking 系统 + +建立统一 Ranking Engine。 + +例如: + +```text +score = + voteScore ++ reviewScore ++ clickScore ++ favoriteScore ++ freshnessScore ++ qualityScore +``` + +可以设计: + +```text +Trending +Popular +Most Voted +Most Saved +Most Viewed +Highest Rated +New +Editor's Choice +``` + +--- + +# 十七、Trending 算法 + +不要简单: + +```text +votes DESC +``` + +建议: + +```text +Trending Score += +votes +× freshness +× velocity +× engagement +``` + +例如: + +```text +过去 24 小时 +过去 7 天 +过去 30 天 +``` + +这样新工具才有机会冲榜。 + +否则老工具会永久霸榜。 + +--- + +# 十八、用户评论 + +用户登录后: + +```text +Rating +Review +Pros +Cons +Use Case +``` + +Review 数据: + +```text +Review +├── userId +├── toolId +├── rating +├── title +├── content +├── pros +├── cons +├── status +├── helpfulCount +└── createdAt +``` + +--- + +# 十九、Review 可信度 + +必须避免: + +```text +工具厂商自己刷评论 +``` + +可以建立: + +```text +Verified User +Verified Usage +Verified Purchase +Verified Owner +``` + +同时允许: + +```text +Helpful +Report +``` + +--- + +# 二十、Tool Submission + +用户可以: + +```text +Submit AI Tool +``` + +提交: + +```text +Name +Website +Description +Logo +Category +Use Cases +Pricing +Social Links +Screenshots +Founder +Contact +``` + +状态: + +```text +Draft +Pending +Reviewing +Approved +Rejected +Published +Archived +``` + +--- + +# 二十一、Claim Listing + +后期增加: + +```text +Claim this tool +``` + +Tool Owner 可以认领工具。 + +认领后可以: + +```text +修改介绍 +修改价格 +上传截图 +增加视频 +回复评论 +查看 Analytics +申请 Featured +``` + +--- + +# 二十二、商业化 + +这是未来非常重要的一层。 + +可以设计: + +```text +Free Listing +Verified Listing +Featured Listing +Sponsored +Homepage Placement +Category Placement +Newsletter +Editorial +``` + +但必须明确区分: + +```text +Organic +Sponsored +Verified +Editor's Choice +``` + +避免影响用户对排名公正性的信任。 + +Futurepedia 当前已经形成 Basic Listing、Verified Listing 和 Enterprise 等商业化层级;AITopTools 也存在 Listing、Homepage Launch、Directory Growth 等商业模式。 + +--- + +# 二十三、SEO 架构 + +SEO 是整个项目最重要的流量来源之一。 + +必须从第一天设计。 + +--- + +## 23.1 Tool SEO + +```text +/tools/chatgpt +/tools/midjourney +/tools/cursor +``` + +--- + +## 23.2 Category SEO + +```text +/ai-tools/writing +/ai-tools/video +/ai-tools/image +/ai-tools/coding +``` + +--- + +## 23.3 Use Case SEO + +这是重点。 + +例如: + +```text +/ai-tools-for/blogging +/ai-tools-for/youtube +/ai-tools-for-seo +/ai-tools-for-students +/ai-tools-for-marketing +``` + +--- + +## 23.4 Comparison SEO + +例如: + +```text +/tools/chatgpt-vs-claude +/tools/cursor-vs-windsurf +/tools/midjourney-vs-flux +``` + +--- + +## 23.5 Alternative SEO + +例如: + +```text +/tools/chatgpt-alternatives +/tools/canva-alternatives +/tools/midjourney-alternatives +``` + +--- + +## 23.6 Collection SEO + +例如: + +```text +/best/ai-writing-tools +/best/free-ai-tools +/best-ai-video-generators +/best-ai-coding-tools +``` + +--- + +# 二十四、Programmatic SEO + +这是整个底座最重要的设计之一。 + +不要把 SEO 页面写死。 + +建立: + +```text +SEO Page Generator +``` + +输入: + +```text +Category +Use Case +Audience +Pricing +Tool +``` + +自动生成: + +```text +Title +Description +H1 +Introduction +Tool List +FAQ +Related Categories +Related Tools +Schema +Internal Links +``` + +例如: + +```text +Best AI Writing Tools for Marketing Teams + +Best Free AI Writing Tools + +Best AI Writing Tools for Students + +Best AI Writing Tools for Bloggers + +Best AI Writing Tools for SEO + +Best AI Writing Tools in 2026 +``` + +但必须避免大量低质量、重复模板页面。 + +--- + +# 二十五、结构化数据 + +支持: + +```text +SoftwareApplication +Product +Review +AggregateRating +Article +BreadcrumbList +FAQPage +Organization +WebSite +``` + +--- + +# 二十六、内部链接系统 + +必须建立自动 Internal Linking。 + +例如: + +```text +Tool + ↓ +Category + ↓ +Use Case + ↓ +Similar Tools + ↓ +Alternative + ↓ +Blog +``` + +最终形成: + +```text +SEO Graph +``` + +而不是孤立页面。 + +--- + +# 二十七、搜索系统 + +第一阶段: + +```text +PostgreSQL Search +``` + +第二阶段: + +```text +Meilisearch +``` + +或者: + +```text +Typesense +``` + +最终可以升级: + +```text +Semantic Search +``` + +例如用户搜索: + +> 帮我找一个可以自动制作 YouTube Shorts 的工具 + +系统不只是匹配: + +```text +YouTube +Shorts +``` + +而是识别: + +```text +Task = Video Creation +Platform = YouTube +Format = Short Video +``` + +然后推荐工具。 + +--- + +# 二十八、AI 推荐系统 + +后期加入: + +```text +What are you trying to do? +``` + +用户输入: + +```text +I need to create marketing videos. +``` + +系统输出: + +```text +Recommended Tools +``` + +推荐因素: + +```text +Use Case +Category +Pricing +Rating +Popularity +User Reviews +``` + +这会成为区别于传统导航站的重要能力。 + +--- + +# 二十九、内容系统 + +原有 Blog 保留。 + +但是升级成: + +```text +Blog +Guides +Comparisons +Alternatives +Best Lists +Tutorials +News +Prompts +Resources +``` + +例如: + +```text +Best AI Video Generators + +10 Best AI Tools for YouTube + +ChatGPT Alternatives + +Best Free AI Writing Tools + +AI Tools for Developers +``` + +--- + +# 三十、首页设计 + +不要简单: + +```text +Header +Banner +Category +Tools +Footer +``` + +建议: + +```text +Header + +Hero +├── Main headline +├── Search +└── Popular searches + +Trending Tools + +Popular Categories + +New AI Tools + +Tools by Use Case + +Editor's Picks + +Community Rankings + +Latest Reviews + +Latest Articles + +Newsletter + +Footer +``` + +首页核心任务只有三个: + +```text +Search +Discover +Explore +``` + +--- + +# 三十一、Header + +Desktop: + +```text +Logo +Discover +Categories +Collections +Rankings +Blog +Submit +Search +Theme +Login +``` + +Mobile: + +```text +Logo +Search +Menu +``` + +所有图标使用 Lucide SVG。 + +--- + +# 三十二、Mobile + +Mobile 不是 Desktop 缩小。 + +需要重新设计: + +```text +Bottom Navigation +Search +Filter Drawer +Tool Card +Vote +Favorite +``` + +重点保证: + +```text +Thumb friendly +One hand operation +Fast navigation +``` + +--- + +# 三十三、后台 Admin + +Admin 应成为整个系统的内容运营中心。 + +Dashboard: + +```text +Users +Tools +Submissions +Reviews +Votes +Traffic +Search +Revenue +``` + +Tool Management: + +```text +Create +Edit +Review +Publish +Feature +Archive +Delete +Merge +``` + +--- + +# 三十四、审核系统 + +Submission: + +```text +Pending + ↓ +Auto Validation + ↓ +AI Classification + ↓ +Human Review + ↓ +Publish +``` + +AI 可以自动识别: + +```text +Category +Tags +Use Cases +Description +Pricing +Language +Duplicate +``` + +人工负责最终审核。 + +--- + +# 三十五、重复工具检测 + +用户提交工具时: + +```text +Website URL +Domain +Tool Name +Embedding +``` + +进行重复检测。 + +例如: + +```text +chatgpt.com +chat.openai.com +openai.com/chatgpt +``` + +不能形成三个工具。 + +--- + +# 三十六、数据采集系统 + +未来需要: + +```text +Tool Discovery +Tool Import +Tool Update +Pricing Update +Broken Link Detection +Logo Update +Screenshot Update +``` + +建立: + +```text +Crawler + ↓ +Parser + ↓ +Normalizer + ↓ +AI Classifier + ↓ +Duplicate Detection + ↓ +Review Queue + ↓ +Publish +``` + +--- + +# 三十七、Analytics + +每个 Tool: + +```text +Views +Clicks +Outbound Clicks +Favorites +Votes +Reviews +Search Impressions +``` + +后台可以看到: + +```text +Tool CTR +Category CTR +Homepage CTR +Search CTR +``` + +这是未来商业化非常重要的数据。 + +--- + +# 三十八、事件系统 + +统一: + +```text +tool_view +tool_click +tool_vote +tool_favorite +tool_review +tool_share +search +category_view +submit_tool +claim_tool +``` + +形成: + +```text +Event +├── id +├── userId +├── sessionId +├── event +├── entityType +├── entityId +├── metadata +└── createdAt +``` + +--- + +# 三十九、通知系统 + +支持: + +```text +In-app +Email +``` + +例如: + +```text +你的工具已通过审核 + +你的工具获得新的 Vote + +你的工具收到新的 Review + +有人回复了你的 Review + +你的工具进入 Trending +``` + +--- + +# 四十、分享系统 + +支持: + +```text +Copy Link +X +LinkedIn +Facebook +Reddit +``` + +不要用 Unicode 字符作为社交图标。 + +统一 SVG Icon。 + +--- + +# 四十一、五套 UI 验证计划 + +底座完成后,必须真正做 5 个网站。 + +目的不是做 5 个完整商业项目。 + +而是验证: + +```text +数据层是否通用 +组件是否通用 +SEO 是否通用 +认证是否通用 +Ranking 是否通用 +Theme 是否通用 +后台是否通用 +``` + +--- + +# 方案 A:Classic AI Directory + +定位: + +> 最标准的 AI 工具导航站。 + +特点: + +```text +大量 Tool +分类 +搜索 +筛选 +排行榜 +Trending +New +``` + +视觉: + +```text +Clean +Dense +Professional +``` + +验证: + +```text +Tool Grid +Filter +Search +Category +Pagination +``` + +--- + +# 方案 B:Product Hunt Style + +定位: + +> AI 产品社区。 + +核心: + +```text +Daily Launch +Upvote +Comments +Maker +Ranking +Collections +``` + +首页: + +```text +Today's AI Products + +Product Feed + +Top Products + +Upcoming + +Discussions +``` + +重点验证: + +```text +Vote +User +Comment +Ranking +``` + +--- + +# 方案 C:Editorial AI + +定位: + +> AI 媒体 + 工具目录。 + +核心: + +```text +Articles +Guides +Best Tools +Reviews +Comparisons +``` + +首页: + +```text +Featured Story + +Editor's Picks + +Best AI Tools + +Latest Articles + +Popular Guides +``` + +重点验证: + +```text +Blog +SEO +Editorial +Content +``` + +--- + +# 方案 D:Niche AI Directory + +定位: + +> 垂直行业 AI。 + +例如: + +```text +AI for Developers +``` + +或者: + +```text +AI for Marketing +``` + +核心: + +```text +Tools +Use Cases +Workflows +Templates +Guides +``` + +重点验证: + +```text +Use Case +Audience +Workflow +Recommendation +``` + +--- + +# 方案 E:Minimal AI Search + +定位: + +> 极简 AI 搜索引擎。 + +首页: + +```text +Logo + +What are you looking for? + +[ Search AI Tools ] + +Popular Searches +``` + +搜索后: + +```text +Recommended Tools +``` + +重点验证: + +```text +Search +Semantic Search +Recommendation +Performance +Mobile +``` + +--- + +# 四十二、五个网站验证标准 + +每个站都必须使用同一个: + +```text +Database +Auth +Admin +Tool Model +User Model +Vote System +Review System +Search +SEO Engine +Analytics +``` + +只改变: + +```text +Theme +Layout +Navigation +Components +Content +Brand +``` + +如果需要大量修改 Core 代码才能完成第五个站: + +> 说明底座架构失败。 + +--- + +# 四十三、组件架构 + +建议: + +```text +src/ +├── app/ +├── components/ +│ ├── ui/ +│ ├── layout/ +│ ├── navigation/ +│ ├── tool/ +│ ├── voting/ +│ ├── review/ +│ ├── search/ +│ └── content/ +│ +├── features/ +│ ├── auth/ +│ ├── tools/ +│ ├── categories/ +│ ├── voting/ +│ ├── reviews/ +│ ├── ranking/ +│ ├── search/ +│ ├── submission/ +│ ├── claim/ +│ ├── analytics/ +│ └── seo/ +│ +├── lib/ +│ ├── auth/ +│ ├── db/ +│ ├── search/ +│ ├── ranking/ +│ ├── seo/ +│ └── analytics/ +│ +└── themes/ + ├── classic/ + ├── product/ + ├── editorial/ + ├── niche/ + └── minimal/ +``` + +--- + +# 四十四、Feature First 架构 + +不要: + +```text +components +utils +pages +``` + +全部混在一起。 + +推荐: + +```text +features/tools +features/voting +features/reviews +features/ranking +``` + +每个 Feature 自己管理: + +```text +components +actions +queries +schemas +types +utils +``` + +这样以后拆模块非常容易。 + +--- + +# 四十五、API 架构 + +核心 API: + +```text +GET /api/tools +GET /api/tools/:slug + +POST /api/tools +PATCH /api/tools/:id +DELETE /api/tools/:id + +POST /api/tools/:id/vote +DELETE /api/tools/:id/vote + +POST /api/tools/:id/favorite +DELETE /api/tools/:id/favorite + +GET /api/tools/:id/reviews +POST /api/tools/:id/reviews + +POST /api/submissions +POST /api/tools/:id/claim + +GET /api/rankings +GET /api/search +``` + +--- + +# 四十六、数据库核心关系 + +```text +User + │ + ├── Vote ─────── Tool + │ + ├── Review ───── Tool + │ + ├── Favorite ─── Tool + │ + └── Submission + +Tool + │ + ├── Category + ├── Tags + ├── UseCases + ├── Reviews + ├── Votes + ├── Favorites + └── Analytics +``` + +--- + +# 四十七、性能要求 + +目标: + +```text +LCP < 2.5s +INP < 200ms +CLS < 0.1 +``` + +核心页面: + +```text +Homepage +Category +Search +Tool Detail +Blog +``` + +必须: + +```text +Server Components First +Image Optimization +Lazy Loading +Pagination +Caching +ISR +Database Index +``` + +--- + +# 四十八、缓存策略 + +例如: + +```text +Tool Detail +Category +Ranking +Homepage +``` + +可以: + +```text +ISR +revalidate +Cache +``` + +而: + +```text +Vote +Review +Favorite +``` + +使用实时请求。 + +--- + +# 四十九、安全 + +必须: + +```text +Rate Limiting +CSRF +XSS +SQL Injection Protection +Input Validation +OAuth Security +Session Security +Admin RBAC +Audit Log +``` + +所有用户输入: + +```text +Zod +``` + +统一验证。 + +--- + +# 五十、反作弊 + +尤其是 Vote。 + +建立: + +```text +Rate Limit +IP Limit +Account Age +Vote Velocity +Duplicate Detection +Suspicious Account +``` + +管理员: + +```text +Vote Audit +``` + +可以查看: + +```text +User +IP +Timestamp +Tool +Action +``` + +--- + +# 五十一、SEO 流量战略 + +最终流量来源应该形成: + +```text +Google + ↓ +SEO Landing Page + ↓ +Category / Use Case + ↓ +Tool + ↓ +Related Tools + ↓ +More Pages +``` + +同时: + +```text +Google + ↓ +Blog + ↓ +Tool + ↓ +Category +``` + +以及: + +```text +Google + ↓ +Comparison + ↓ +Tool +``` + +--- + +# 五十二、SEO 页面矩阵 + +至少建立: + +```text +Tool Pages +Category Pages +Use Case Pages +Audience Pages +Best Pages +Alternative Pages +Comparison Pages +Blog Pages +Guide Pages +``` + +形成: + +```text +8 × N +``` + +的可扩展 SEO 页面体系。 + +--- + +# 五十三、流量增长模型 + +第一阶段: + +```text +SEO +``` + +第二阶段: + +```text +User Generated Content +``` + +第三阶段: + +```text +Community +``` + +第四阶段: + +```text +Newsletter +``` + +第五阶段: + +```text +Social Distribution +``` + +第六阶段: + +```text +Tool Owner Distribution +``` + +--- + +# 五十四、最重要的增长闭环 + +必须建立: + +```text +Tool Owner + ↓ +Submit Tool + ↓ +获得 Listing + ↓ +分享 Listing + ↓ +带来用户 + ↓ +用户 Vote / Review + ↓ +Tool Ranking 上升 + ↓ +更多流量 + ↓ +Tool Owner 更愿意提交 +``` + +这是比单纯 SEO 更重要的增长飞轮。 + +--- + +# 五十五、Newsletter + +保留现有 Resend。 + +增加: + +```text +Weekly AI Tools +New AI Tools +Trending AI Tools +Editor's Picks +``` + +Newsletter 不是简单: + +```text +订阅成功 +``` + +而是成为: + +```text +Traffic Retention +``` + +渠道。 + +--- + +# 五十六、商业模式 + +第一阶段不要急着收费。 + +先建立: + +```text +Traffic +Users +Tools +Reviews +Votes +``` + +之后: + +```text +Free Listing + ↓ +Verified Listing + ↓ +Featured + ↓ +Sponsored + ↓ +Advertising + ↓ +Enterprise +``` + +--- + +# 五十七、第一阶段 MVP + +MVP 必须包含: + +```text +Tool Directory +Category +Search +Filter +Tool Detail +Google Login +GitHub Login +Favorite +Vote +Review +Submit Tool +Admin +Theme +i18n +SEO +Blog +Analytics +``` + +--- + +# 五十八、V1 + +增加: + +```text +Ranking +Trending +Claim Tool +User Profile +Collections +Alternative +Comparison +Newsletter +Advanced SEO +``` + +--- + +# 五十九、V2 + +增加: + +```text +Semantic Search +AI Recommendation +Automatic Tool Import +Automatic Classification +Duplicate Detection +Tool Health Check +Advanced Analytics +Monetization +``` + +--- + +# 六十、V3 + +最终变成: + +```text +AI Directory Platform +``` + +支持: + +```text +Multi Site +Multi Brand +Multi Theme +Multi Locale +Multi Tenant +``` + +也就是: + +```text +一个 Core + ↓ +多个 AI Directory +``` + +--- + +# 六十一、开发阶段 + +## Phase 0:底座审计 + +时间: + +**2~3 天** + +工作: + +```text +Clone Repository +Run Project +Review Architecture +Review Database +Review Auth +Review UI +Review Admin +Review SEO +Review i18n +``` + +输出: + +```text +Architecture Audit +Technical Debt List +Refactor Plan +``` + +--- + +# 六十二、Phase 1:Design System + +时间: + +**3~5 天** + +完成: + +```text +Theme +Typography +Color +Spacing +Icon +Button +Card +Input +Modal +Dropdown +Tabs +Toast +Skeleton +``` + +同时建立: + +```text +Lucide Icon Rule +``` + +严格禁止: + +```text +Emoji +Unicode Icon +HTML Entity Icon +``` + +--- + +# 六十三、Phase 2:Core Data + +时间: + +**4~7 天** + +完成: + +```text +Tool +Category +Tag +UseCase +Pricing +User +Vote +Review +Favorite +Submission +Claim +``` + +数据库 Migration。 + +--- + +# 六十四、Phase 3:Community + +时间: + +**5~7 天** + +完成: + +```text +Google +GitHub +Profile +Vote +Favorite +Review +Comment +User Activity +``` + +--- + +# 六十五、Phase 4:Ranking + +时间: + +**3~5 天** + +完成: + +```text +Trending +Popular +Most Voted +Most Saved +Highest Rated +New +Editor's Choice +``` + +建立 Ranking Engine。 + +--- + +# 六十六、Phase 5:Submission + +时间: + +**3~5 天** + +完成: + +```text +Submit +Review +Approve +Reject +Edit +Claim +``` + +--- + +# 六十七、Phase 6:SEO + +时间: + +**5~8 天** + +完成: + +```text +Metadata +Sitemap +Robots +Schema +Canonical +Breadcrumb +Internal Linking +Category SEO +Use Case SEO +Alternative +Comparison +``` + +--- + +# 六十八、Phase 7:Search + +时间: + +**3~5 天** + +第一版: + +```text +PostgreSQL Search +``` + +后续: + +```text +Meilisearch +``` + +--- + +# 六十九、Phase 8:Analytics + +时间: + +**3~5 天** + +完成: + +```text +Page View +Tool View +Outbound Click +Vote +Favorite +Search +Review +Submission +``` + +--- + +# 七十、Phase 9:五套 UI + +时间: + +**10~15 天** + +依次实现: + +```text +Classic +Product Hunt +Editorial +Niche +Minimal Search +``` + +--- + +# 七十一、Phase 10:压力测试 + +测试: + +```text +100 tools +1,000 tools +10,000 tools +100,000 tools +``` + +测试: + +```text +Search +Category +Ranking +Vote +Review +Homepage +Sitemap +``` + +--- + +# 七十二、Phase 11:上线 + +推荐: + +```text +Vercel ++ +PostgreSQL ++ +R2 ++ +Resend +``` + +现有项目本身已经提供 Vercel / Docker 的部署路径。 + +--- + +# 七十三、建议的项目里程碑 + +```text +M1 +基础架构稳定 + +M2 +Design System 完成 + +M3 +Tool Directory 完成 + +M4 +Auth + User 完成 + +M5 +Vote + Review 完成 + +M6 +Ranking 完成 + +M7 +Submission + Claim 完成 + +M8 +SEO Engine 完成 + +M9 +Search 完成 + +M10 +Analytics 完成 + +M11 +UI Theme A + +M12 +UI Theme B + +M13 +UI Theme C + +M14 +UI Theme D + +M15 +UI Theme E + +M16 +性能、安全、SEO、上线 +``` + +--- + +# 七十四、验收标准 + +## UI + +```text +所有图标 SVG +所有图标 Lucide +无 Emoji +无 Unicode Icon +无字符箭头 +Responsive +Light/Dark +``` + +## Functional + +```text +Google Login +GitHub Login +Vote +Favorite +Review +Submit +Claim +Search +Filter +Ranking +``` + +## SEO + +```text +SSR +Metadata +Sitemap +Schema +Canonical +Internal Linking +``` + +## Performance + +```text +LCP < 2.5s +INP < 200ms +CLS < 0.1 +``` + +## Security + +```text +RBAC +Rate Limit +Input Validation +Audit Log +Anti Spam +Anti Vote Abuse +``` + +--- + +# 七十五、最重要的架构原则 + +未来开发过程中必须坚持: + +### 原则 1 + +**Core 与 Site Theme 分离。** + +不要: + +```text +if site === "xxx" +``` + +满天飞。 + +应该: + +```text +Theme +Layout +Component Variant +``` + +--- + +### 原则 2 + +**业务逻辑与 UI 分离。** + +例如 Vote: + +```text +useVote() +``` + +不应该知道: + +```text +Button 长什么样 +``` + +--- + +### 原则 3 + +**Ranking Engine 独立。** + +未来可以: + +```text +Product Hunt Ranking +AI Directory Ranking +Editor's Ranking +Sponsored Ranking +``` + +--- + +### 原则 4 + +**SEO Engine 独立。** + +让任何站点都可以: + +```text +generateSEOPage() +``` + +--- + +### 原则 5 + +**内容模型不要写死。** + +Tool、Category、Use Case、Audience、Collection 都应该可以组合。 + +--- + +# 七十六、推荐的最终产品模型 + +最终不要把系统理解成: + +```text +AI Tools Directory +``` + +而应该理解成: + +```text + AI Discovery Platform + │ + ┌───────────────────┼───────────────────┐ + │ │ │ + Directory Community Content + │ │ │ + Tools Vote/Review Blog/Guide + │ │ │ + └───────────────────┼───────────────────┘ + │ + Recommendation + │ + Ranking Engine + │ + Search Engine + │ + SEO Engine + │ + Analytics + │ + Monetization +``` + +--- + +# 七十七、最终目标 + +第一阶段: + +> 做一个比普通 AI 导航站更现代的 AI Directory。 + +第二阶段: + +> 做一个有用户行为和社区机制的 AI Product Discovery 平台。 + +第三阶段: + +> 做一个能够通过 SEO、UGC、Ranking、Review、Submission 自增长的流量平台。 + +最终: + +> **同一套 Core,可以快速生成不同品牌、不同视觉、不同垂直领域的 AI Directory。** + +--- + +# 七十八、开发优先级 + +最终优先级建议严格按照: + +```text +P0 + +基础架构 +Design System +Tool +Category +Search +SEO +Auth +Admin + + +P1 + +Vote +Favorite +Review +Ranking +Submission +Claim +User Profile + + +P2 + +Collections +Comparison +Alternative +Newsletter +Analytics + + +P3 + +Semantic Search +AI Recommendation +Auto Classification +Crawler +Tool Health +Advanced Ranking + + +P4 + +Monetization +Sponsored +Featured +Enterprise +Multi Tenant +``` + +--- + +# 七十九、第一版不要做的东西 + +为了避免项目失控,第一版暂时不要做: + +```text +复杂 AI Chat +复杂推荐模型 +完整广告平台 +复杂会员系统 +复杂支付系统 +实时聊天 +过度复杂社交关系 +过度复杂积分系统 +``` + +第一版真正需要验证的是: + +```text +用户能不能找到工具 +用户愿不愿意 Vote +用户愿不愿意 Review +Tool Owner 愿不愿意提交 +Google 能不能大量收录 +SEO 页面有没有流量 +五套 UI 能不能共用 Core +``` + +--- + +# 八十、最终验收目标 + +整个项目完成后,需要得到: + +```text +AI Directory Core +│ +├── Auth +├── User +├── Tool +├── Category +├── Use Case +├── Search +├── Vote +├── Review +├── Favorite +├── Ranking +├── Submission +├── Claim +├── Analytics +├── SEO +├── Blog +├── Newsletter +├── Admin +├── Theme +└── i18n +``` + +然后: + +```text + AI Directory Core + │ + ┌────────────┼────────────┐ + ↓ ↓ ↓ + Classic Community Editorial + │ │ │ + └────────────┼────────────┘ + ↓ + Niche Directory + │ + ↓ + AI Search +``` + +如果这五套产品都能够在不修改核心业务逻辑的情况下快速完成,那么这个项目才算真正完成了“**AI Directory 开发底座**”的目标。 + +--- + +# 八十一、最终产品战略结论 + +这个项目最值得投入的不是: + +```text +把页面做得像 Toolify +``` + +而是建立四个核心资产: + +```text +1. Tool Data +2. User Community +3. SEO Page Graph +4. Ranking / Recommendation Engine +``` + +其中: + +**Tool Data 是内容资产。** + +**User Community 是增长资产。** + +**SEO Page Graph 是流量资产。** + +**Ranking / Recommendation Engine 是产品壁垒。** + +UI 只是这四个资产的不同表现形式。 + +所以五套 UI 的验证意义非常重要: + +> **如果五套完全不同的网站都能够复用同一套 Tool、User、Vote、Review、Ranking、SEO、Search 和 Admin,那么这个项目就不再是一个 AI 导航站,而是一套真正可以持续孵化 AI 流量网站的基础设施。** + +## 最后要求 +- 完成底坐后,搞个5个不同UI, 类型的AI网站来验证底坐的`快速, 易用, 可用, 可靠` \ No newline at end of file diff --git a/docs/交付报告.md b/docs/交付报告.md new file mode 100644 index 0000000..6dabd03 --- /dev/null +++ b/docs/交付报告.md @@ -0,0 +1,217 @@ +# AI Directory Platform — 交付报告 + +> 基于 `coolchange-ai/toolso-ai-open` 二次开发的可复用 AI Directory 基础底座, +> 按《AI-Directory-Platform开发计划与技术设计文档》完成 MVP + V1 核心能力, +> 并以 **五套不同 UI 的完整站点** 完成底座「快速、易用、可用、可靠」验证。 + +- 代码位置:`AI-Directory-Platform/packages/core/`(底座库)+ `AI-Directory-Platform/sites/`(5 个独立网站) +- 技术栈:Next.js 16 · React 19 · TypeScript · Tailwind CSS · PostgreSQL + Drizzle ORM · Better Auth · next-intl +- 验证状态:**typecheck 0 错误 · bun test 32/32 通过 · 5 套主题全部构建成功 · 端到端交互测试 PASS** + +--- + +## 一、仓库结构(monorepo) + +``` +AI-Directory-Platform/ +├── packages/core/ # @aidir/core —— AI Directory 底座库 +│ ├── src/pages/ # 全部页面组件体(1:1 镜像路由树) +│ ├── src/kit/ # 站点外壳工厂(Header/Footer/chrome/首页数据) +│ ├── src/lib|features/ # ranking/seo/analytics/voting/reviews/... 全部业务 +│ ├── content/blog/ # MDX 文章 +│ ├── messages/ # 基础文案(en/zh,546 键) +│ └── scripts/ # db/seed/生成器/启动器/e2e +└── sites/ # 5 个独立 Next.js 网站(各自 package.json/构建/部署) + ├── ai-stack/ # AI Stack —— Classic 目录 :3001 + ├── launchai/ # LaunchAI —— Product Hunt 式 :3002 + ├── the-ai-ledger/ # The AI Ledger —— Editorial 媒体 :3003 + ├── devai-tools/ # DevAI.tools —— 开发者垂直 :3004 + └── findai/ # findai —— 极简搜索 :3005 +``` + +每个站点应用只有三类自己的代码: +1. `src/site/brand.tsx` —— 品牌/导航/页脚/SEO 文案(SiteConfig) +2. `src/site/home.tsx` —— 站点首页组件 +3. `src/app/**` —— 薄路由(约 56 个文件,全部为 re-export 底座页面组件 + 内联路由段配置) + +**站点之间零重复业务代码**;新增第 6 个网站 = 在生成器 `SITES` 里加一个条目并运行 +`bun packages/core/scripts/generate-site.mjs `,零 Core 代码修改。 + +## 一'、快速开始 + +```bash +cd AI-Directory-Platform + +bun install # workspace 安装(root 一次) + +# 数据库(五个网站共享同一套 PostgreSQL —— 设计文档 §42) +cd packages/core && cp .env.example .env.local && bun run db:push && bun run seed:platform && cd ../.. + +# 构建 5 个网站(构建时数据库需在线;构建期间不要运行站点,避免连接数耗尽) +for s in ai-stack launchai the-ai-ledger devai-tools findai; do (cd sites/$s && cp -n .env.example .env.local && bun run build); done + +# 一键启动(或分别 cd sites/ && bun run start) +bash packages/core/scripts/start-all-sites.sh + +# 质量 +bun test packages/core/tests # 32 个单元测试 +bun run typecheck # core + 5 站全部 0 错误 +``` + +演示账号(种子内置,密码均为 `password123`): + +| 账号 | 角色 | +| --- | --- | +| `admin@aidirectory.dev` | 管理员(可访问 `/admin` 全部后台) | +| `alice@demo.dev` 等 5 个 | 普通用户 | + +--- + +## 二、与设计文档验收标准对照 + +### UI(§74) + +| 要求 | 状态 | +| --- | --- | +| 所有图标 SVG / Lucide,无 Emoji、Unicode 图标、字符箭头 | ✅ 全部使用 `lucide-react`;种子分类 icon 置空;唯一例外是种子工具名 "DALL·E 3" 的 `·` 为产品名本身 | +| Responsive(375/768/1280/1440 实测截图) | ✅ Mobile First,Header 移动端汉堡抽屉 + 搜索 | +| Light/Dark/System | ✅ 继承底座 next-themes,全组件适配 | + +### Functional(§74 / MVP §57) + +| 要求 | 实现位置 | +| --- | --- | +| Google Login | ✅ 底座已有(env 门控) | +| GitHub Login | ✅ `src/lib/auth.ts`(env 门控)+ 登录页按钮 | +| Vote | ✅ `src/features/voting/`(登录投票、原子 toggle、滑动窗口限流 40 次/10min、乐观 UI、`/api/tools/:id/vote`) | +| Favorite | ✅ 底座已有 | +| Review | ✅ `src/features/reviews/`(评分/优缺点/使用场景/Helpful/每用户一条/聚合评分回写) | +| Submit | ✅ `src/features/submission/`(提交 → Admin 审批自动发布 → 域名重复检测) | +| Claim | ✅ `src/features/claim/`(认领申请 → 审批 → Owner 徽标 + 白名单字段编辑 `ownerUpdateTool`) | +| Search | ✅ `/api/search`(PostgreSQL 多维 ILIKE + 热度排序 + search 埋点) | +| Filter | ✅ 分类 / 定价 / Use Case / Audience / 排序(最新、最热) | +| Ranking | ✅ `src/lib/ranking/`(七个榜单 + Ranking Engine 独立) | + +### SEO(§74 / §23 / §24 / §52) + +| 要求 | 实现 | +| --- | --- | +| SSR / ISR | ✅ 全站 RSC + ISR(1h)+ 变更 revalidatePath | +| Metadata / Canonical / hreflang | ✅ `src/lib/metadata.ts`(继承底座) | +| Sitemap | ✅ `src/app/sitemap.ts` 扩展至 270 条:工具 / 分类 / 用例 / 受众 / 合集 / Top20 Alternatives / 对比页 | +| Schema | ✅ SoftwareApplication(+AggregateRating) / Review 数据 / FAQPage / BreadcrumbList / ItemList / CollectionPage / WebSite / Organization | +| Programmatic SEO | ✅ `src/lib/seo/page-generator.ts`:由实体真实数据生成 Title/H1/Intro/FAQ(避免低质模板页:Alternatives/Comparison 只为 Top 工具生成) | +| 内链系统 | ✅ Tool ↔ Category ↔ Use Case ↔ Audience ↔ Alternatives ↔ Best ↔ Blog 的 SEO Graph | + +### Performance(§47) + +Server Components First、ISR、`next/image`、分页、数据库索引(vote/rating/domain 等 7 个新索引)。构建产物静态化率见构建输出(SSG 为主,交互 API 为 ƒ)。 + +### Security(§74) + +RBAC(`requireAdmin`/`isAdmin`)、Zod 全量输入校验、投票限流 + pending 唯一索引防重、认领 pending 唯一约束、Vote Audit 审计页(用户/IP/来源/速度告警)、外链 `nofollow` + 跳转埋点。 + +--- + +## 三、底座架构(Core 与 Site 分离) + +``` +src/ +├── lib/ +│ ├── ranking/ # Ranking Engine(score.ts 纯函数 + queries.ts SQL + boards.ts) +│ ├── seo/ # Programmatic SEO 页面生成器 +│ ├── analytics/ # 事件埋点(recordEvent/recordToolView) +│ ├── tools/duplicate.ts# 重复工具检测(域名归一化/slug/名称) +│ └── db/schema/ # community(投票/评论/提交/认领) discovery(用例/受众/合集) analytics(事件) +├── features/ # Feature-First:voting / reviews / submission / claim / discovery / alternatives +├── themes/ # ★ Site Theme 层:registry + chrome + shared + 5 套主题 +│ ├── classic/ # AI Stack —— 专业目录(Clean/Dense/Professional) +│ ├── product/ # LaunchAI —— Product Hunt 式每日发布社区 +│ ├── editorial/ # The AI Ledger —— 媒体型(Featured Story/编辑精选/购买指南) +│ ├── niche/ # DevAI.tools —— 垂直(AI for Developers,终端风 Hero) +│ └── minimal/ # findai —— 极简搜索引擎(一个框 + 热门搜索) +└── app/[locale]/ # 路由:/tools /rankings /best /ai-tools-for /submit /admin/* /api/* +``` + +**五套站点 = 同一套数据库、认证、Admin、Tool 模型、Vote/Review、Ranking、Search、SEO、Analytics**, +只改变 Theme/Layout/Navigation/Content/Brand —— 即设计文档 §42 的验证标准。新增第 6 个站点只需 +在 `src/themes/` 增加一个目录并注册 registry,**零 Core 代码修改**。 + +主题在**构建时**注入(`SITE_THEME= NEXT_DIST_DIR=.next- bun run build`), +一次构建对应一个站点部署,SSG/ISR 性能不受影响。 + +--- + +## 四、五个网站验证结论(§41 / 最终要求) + +| 网站 | 目录 | 端口 | 定位 | 首页形态 | +| --- | --- | --- | --- | --- | +| AI Stack | sites/ai-stack | 3001 | 标准目录 | Hero 搜索 + Trending/分类/新工具/用例/合集/评论 | +| LaunchAI | sites/launchai | 3002 | 产品社区 | 今日发布 Feed + 大投票块 + Leaderboard 侧栏 | +| The AI Ledger | sites/the-ai-ledger | 3003 | AI 媒体 | Featured Story + 编辑精选 + 购买指南 + 社区引语 | +| DevAI.tools | sites/devai-tools | 3004 | 开发者垂直 | 终端风 Hero + 工作流/用例/技术栈 | +| findai | sites/findai | 3005 | 极简搜索 | 居中大搜索框 + 热门搜索 + Trending | + +验证结果:**5 个网站是 5 个独立 Next.js 应用**(独立 package.json、独立 .next 构建、独立进程/端口), +共享同一套 PostgreSQL / Better Auth / Admin(§42 验证标准)。站点间零 `if site === "xxx"` 分支; +每站均通过构建、11 条路由 × 5 站 = 55 项 200 冒烟、1440/390 双断点截图、控制台 0 报错、 +登录→投票(DB 3→4→3)→重复提交检测 e2e PASS。 + +--- + +## 五、端到端验证记录 + +| 验证项 | 结果 | +| --- | --- | +| 19 条核心路由冒烟(含 zh、sitemap、search API、outbound 307 跳转) | ✅ 全部 200 | +| JSON-LD(SoftwareApplication+AggregateRating/FAQPage/Breadcrumb/ItemList) | ✅ 详情页实测输出 | +| Sitemap 270 条(含用例/受众/合集/alternatives/vs) | ✅ | +| 登录(alice@demo.dev)→ 投票 toggle(DB 3→4→3,按钮同步) | ✅ PASS | +| 重复提交检测(提交 chatgpt.com 被拦截并列出已有工具) | ✅ PASS | +| 评论表单(已有评论回显编辑模式、星级、优缺点) | ✅ 截图验证 | +| 五主题品牌/版式差异化(AI Stack/LaunchAI/The AI Ledger/DevAI.tools/findai) | ✅ 截图验证 | +| `bun test`(ranking 评分/贝叶斯/路由解析/域名归一化/SEO 生成器) | ✅ 32/32 | +| `bun run typecheck` | ✅ 0 错误 | +| `bun run build` × 5 主题 | ✅ 全部成功 | + +截图存档:`/tmp/aidir-shots/`(16 张,含移动端 390×844)。 + +--- + +## 六、API 一览(§45) + +``` +POST/DELETE /api/tools/:id/vote 投票/取消(登录,限流) +GET /api/search?q= PostgreSQL 搜索(含埋点) +GET /api/outbound?tool=slug 外链跳转 + tool_click 埋点 + 计数 +GET /api/tools(列表查询走 server actions:getPublishedTools 支持 category/pricing/usecase/audience/sort) +POST /api/auth/[...all] Better Auth(邮箱密码 + Google + GitHub) +``` + +提交/认领/评论/收藏走 Server Actions(`features/*/actions.ts`),与 REST 共存。 + +--- + +## 七、事件与分析(§37/§38) + +`event` 表统一采集 10 类事件:`tool_view / tool_click / tool_vote / tool_unvote / tool_favorite / +tool_review / tool_share / search / category_view / submit_tool / claim_tool`。 +详情页浏览与外链点击自动同步 `tool.viewCount/clickCount` 冗余列; +`/admin/analytics` 输出近 30 天事件总量、工具 CTR 排行(views≥10)、热门搜索词。 + +--- + +## 八、已知边界与后续(V2 路线) + +1. **主题文案 i18n**:五套主题的 Brand 文案当前为英文(品牌层);核心页面(工具/榜单/表单/后台)中英双语完整。后续可把主题文案迁入 `messages/.json`。 +2. **OAuth 凭据**:Google/GitHub 登录需在生产配置真实 Client ID/Secret(env 门控,缺省自动隐藏按钮)。 +3. **V2 待办**(按设计文档 §59):Meilisearch 语义搜索、AI 推荐、自动分类、爬虫导入、Monetization 层。 +4. **评论可信度**(§19):已实现 Verified User(邮箱认证徽标)+ Helpful 投票;Verified Usage/Purchase 留待 V2。 +5. 上游遗留兼容性升级:framer-motion 11→12(本次已升级以修复 React 19 类型)。 + +--- + +## 九、Git 状态 + +全部改动已在 `core/` 仓库本地提交(见 `git log`),上游远程 `origin` 保留, +可随时 diff 审查或推送 fork。 diff --git a/package.json b/package.json index 885161e..92e8637 100644 --- a/package.json +++ b/package.json @@ -1,118 +1,21 @@ { - "name": "toolso-ai", + "name": "ai-directory-platform", "version": "1.0.0", - "description": "An open-source AI tools directory to help you discover the best AI tools across various categories.", - "private": false, - "keywords": [ - "ai-tools", - "ai-directory", - "ai-tools-directory", - "artificial-intelligence", - "machine-learning", - "nextjs", - "typescript", - "tailwindcss", - "open-source" + "description": "AI Directory Platform — 可复用 AI Directory 底座 + 多站点(monorepo)", + "private": true, + "workspaces": [ + "packages/*", + "sites/*" ], - "license": "Apache-2.0", - "homepage": "https://toolso.ai", - "repository": { - "type": "git", - "url": "https://github.com/coolchange-ai/toolso-ai-open.git" - }, - "bugs": { - "url": "https://github.com/coolchange-ai/toolso-ai-open/issues" - }, - "author": { - "name": "CoolChange.AI", - "url": "https://coolchange.ai" - }, "scripts": { - "dev": "node scripts/run-dev.mjs", - "build": "npm run generate:blog-manifest && next build", - "start": "next start", - "lint": "eslint .", - "db:generate": "drizzle-kit generate", - "db:migrate": "drizzle-kit migrate", - "db:push": "drizzle-kit push", - "db:studio": "drizzle-kit studio", - "admin:setup": "tsx scripts/setup-admin.ts", - "seed:tools": "tsx scripts/seed-tools.ts", - "generate:blog-manifest": "node scripts/generate-blog-manifest.mjs", - "typecheck": "tsc --noEmit", - "i18n:check": "node scripts/check-i18n.mjs", - "seed:platform": "bun scripts/seed-platform.ts", - "build:theme": "next build", - "test:e2e": "bun scripts/e2e-interaction.ts", - "shots": "bun scripts/screenshot-pages.ts" - }, - "dependencies": { - "@aws-sdk/client-s3": "^3.958.0", - "@better-auth/client": "0.0.2-alpha.3", - "@hookform/resolvers": "^3.4.2", - "@mapbox/rehype-prism": "^0.9.0", - "@mdx-js/loader": "^3.0.1", - "@mdx-js/react": "^3.0.1", - "@next/mdx": "^14.2.3", - "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-slot": "^1.0.2", - "@react-email/components": "^0.5.3", - "@tabler/icons-react": "^3.5.0", - "@tailwindcss/typography": "^0.5.13", - "@tanstack/react-store": "^0.7.5", - "@types/mdx": "^2.0.13", - "@vercel/analytics": "^1.5.0", - "@vercel/speed-insights": "^1.2.0", - "better-auth": "^1.4.10", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.1", - "cobe": "^0.6.3", - "date-fns": "^3.6.0", - "drizzle-kit": "^0.31.4", - "drizzle-orm": "^0.44.5", - "fast-glob": "^3.3.2", - "framer-motion": "^12", - "geist": "^1.3.0", - "lucide-react": "^0.562.0", - "nanoid": "^5.1.6", - "next": "16.1.1", - "next-intl": "^4.7.0", - "next-themes": "^0.4.6", - "next-view-transitions": "^0.3.5", - "postgres": "^3.4.7", - "prettier": "^3.7.4", - "prismjs": "^1.29.0", - "react": "^19.2.3", - "react-dom": "^19.2.3", - "react-email": "^4.2.11", - "react-hook-form": "^7.51.5", - "react-icons": "^5.2.1", - "react-markdown": "^10.1.0", - "react-wrap-balancer": "^1.1.1", - "reading-time": "^1.5.0", - "rehype-highlight": "^7.0.2", - "remark-gfm": "^4.0.0", - "resend": "^6.1.0", - "sonner": "^2.0.7", - "tailwind-merge": "^2.3.0", - "zod": "^3.23.8" - }, - "devDependencies": { - "@types/bun": "^1.4.2", - "@types/node": "^20", - "@types/react": "^19.2.7", - "@types/react-dom": "^19.2.3", - "dotenv": "^17.2.2", - "eslint": "^9.39.5", - "eslint-config-next": "16.1.1", - "pg": "^8.16.3", - "playwright": "^1.57.0", - "png-to-ico": "^3.0.1", - "postcss": "^8", - "sharp": "^0.34.5", - "tailwindcss": "^3.4.1", - "tsx": "^4.20.5", - "typescript": "^5" - }, - "packageManager": "pnpm@10.11.1+sha512.e519b9f7639869dc8d5c3c5dfef73b3f091094b0a006d7317353c72b124e80e1afd429732e28705ad6bfa1ee879c1fce46c128ccebd3192101f43dd67c667912" + "build:core": "bun run --filter '@aidir/core' generate:blog-manifest", + "gen:sites": "bun packages/core/scripts/generate-site.mjs all", + "db:push": "bun run --filter '@aidir/core' db:push", + "db:migrate": "bun run --filter '@aidir/core' db:migrate", + "seed": "bun packages/core/scripts/seed-platform.ts --force", + "test": "bun test packages/core/tests", + "typecheck": "tsc --noEmit -p packages/core && tsc --noEmit -p sites/ai-stack && tsc --noEmit -p sites/launchai && tsc --noEmit -p sites/the-ai-ledger && tsc --noEmit -p sites/devai-tools && tsc --noEmit -p sites/findai", + "build:all": "for s in ai-stack launchai the-ai-ledger devai-tools findai; do (cd sites/$s && bun run build); done", + "start:all": "bash packages/core/scripts/start-all-sites.sh" + } } diff --git a/.dockerignore b/packages/core/.dockerignore similarity index 100% rename from .dockerignore rename to packages/core/.dockerignore diff --git a/.env.example b/packages/core/.env.example similarity index 100% rename from .env.example rename to packages/core/.env.example diff --git a/.gitattributes b/packages/core/.gitattributes similarity index 100% rename from .gitattributes rename to packages/core/.gitattributes diff --git a/packages/core/.gitignore b/packages/core/.gitignore new file mode 100644 index 0000000..a252ab5 --- /dev/null +++ b/packages/core/.gitignore @@ -0,0 +1,66 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# macOS +.DS_Store +.AppleDouble +.LSOverride + +# Windows +Thumbs.db +ehthumbs.db +Desktop.ini + +# Editor directories +.vscode/ +.idea/ +*.swp +*.swo +*~ +.env + +# local documentation +.local-docs/ + +# scripts +/scripts/manage-users.ts + +# 多主题构建产物 +/.next-product +/.next-editorial +/.next-niche +/.next-minimal diff --git a/CLAUDE.md b/packages/core/CLAUDE.md similarity index 100% rename from CLAUDE.md rename to packages/core/CLAUDE.md diff --git a/Dockerfile b/packages/core/Dockerfile similarity index 100% rename from Dockerfile rename to packages/core/Dockerfile diff --git a/LICENSE b/packages/core/LICENSE similarity index 100% rename from LICENSE rename to packages/core/LICENSE diff --git a/packages/core/README.md b/packages/core/README.md new file mode 100644 index 0000000..96b1c1d --- /dev/null +++ b/packages/core/README.md @@ -0,0 +1,499 @@ +
+ +# Toolso.AI + +**An open-source AI tools directory to help you discover the best AI tools** + +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +[![Next.js](https://img.shields.io/badge/Next.js-16-black?logo=next.js)](https://nextjs.org/) +[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react)](https://react.dev/) +[![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?logo=typescript)](https://www.typescriptlang.org/) +[![Tailwind CSS](https://img.shields.io/badge/Tailwind%20CSS-3-06B6D4?logo=tailwindcss)](https://tailwindcss.com/) +[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-336791?logo=postgresql)](https://www.postgresql.org/) + +[English](#english) | [中文](#中文) + +
+ +**Discover, explore, and share the best AI tools.** + +
+ +--- + + + +## Overview + +Toolso.AI is an open-source AI tools directory designed to help users discover the best AI tools across various categories. Built with Next.js 16, React 19, and TypeScript, it features a modern, responsive interface with powerful search and filtering capabilities, multilingual support, and a comprehensive admin panel for tool management. + +### Key Features + +| Feature | Description | Benefits | +|---------|-------------|----------| +| **AI Tools Directory** | Categorized AI tools listing | Easy discovery and exploration | +| **Search & Filter** | Powerful search with category filters | Find the right tool quickly | +| **Admin Panel** | Tool & user management | Manage content with ease | +| **Favorites** | Save tools to your personal collection | Sign in and build your toolbox | +| **Newsletter** | Footer subscription backed by Resend | Grow your audience | +| **Blog System** | MDX-powered multilingual blog | SEO-optimized AI insights | +| **i18n** | next-intl internationalization | English & Chinese out of the box | +| **Authentication** | Better Auth + Google OAuth | User accounts and submissions | +| **Theming** | Light/Dark mode | Comfortable browsing experience | + +## Quick Start + +### Prerequisites + +- Node.js 18+ +- pnpm 8+ +- PostgreSQL database + +### Installation + +```bash +# Clone the repository +git clone https://github.com/coolchange-ai/toolso-ai-open.git +cd toolso-ai-open + +# Install dependencies +pnpm install + +# Set up environment variables +cp .env.example .env.local + +# Push database schema +pnpm db:push + +# (Optional) Seed 50 AI tools, 10 categories and 30 tags +pnpm seed:tools + +# (Optional) Create an admin account +pnpm admin:setup + +# Start development server +pnpm dev +``` + +Open [http://localhost:3000](http://localhost:3000) to see your app. + +### Environment Configuration + +Create `.env.local` with your configuration: + +```env +# Required +DATABASE_URL="postgresql://user:password@host/db?sslmode=require" +BETTER_AUTH_SECRET="your-secret-key-at-least-32-characters" +BETTER_AUTH_URL="http://localhost:3000" +NEXT_PUBLIC_APP_URL="http://localhost:3000" + +# Email (Required for auth features) +RESEND_API_KEY="re_your_api_key" +RESEND_FROM_EMAIL="Your App " + +# Optional: Google OAuth +AUTH_GOOGLE_ID="your-google-client-id" +AUTH_GOOGLE_SECRET="your-google-client-secret" +``` + +See [.env.example](.env.example) for all available options. + +## Project Structure + +``` +src/ +├── app/ +│ ├── [locale]/ # Internationalized routes +│ │ ├── (auth)/ # Authentication pages +│ │ ├── (marketing)/ # Public pages (home, blog, tools) +│ │ ├── (protected)/ # User dashboard, profile +│ │ └── (admin)/ # Admin panel +│ └── api/ # API routes +├── components/ # Reusable UI components +├── features/ # Feature modules +│ ├── auth/ # Authentication logic +│ ├── admin/ # Admin components +│ ├── tools/ # AI tools directory +│ └── navigation/ # Navigation components +├── lib/ # Core utilities +│ ├── auth.ts # Better Auth config +│ ├── db/ # Database schema & connection +│ └── email.ts # Email utilities +└── emails/ # React Email templates + +messages/ # i18n translation files +public/ # Static assets +scripts/ # Build & admin scripts +``` + +## Tech Stack + +### Frontend +- **Framework**: Next.js 16 (App Router) +- **UI Library**: React 19 +- **Styling**: Tailwind CSS + Framer Motion +- **Components**: Custom components + Radix UI +- **Forms**: React Hook Form + Zod validation +- **Themes**: next-themes (dark/light mode) + +### Backend +- **Authentication**: Better Auth +- **Database**: PostgreSQL + Drizzle ORM +- **Email**: Resend +- **Storage**: Cloudflare R2 / AWS S3 + +### Developer Experience +- **Language**: TypeScript (strict mode) +- **Linting**: ESLint +- **Package Manager**: pnpm + +## Available Scripts + +```bash +pnpm dev # Start development server +pnpm build # Build for production +pnpm start # Start production server +pnpm lint # Run ESLint (flat config) +pnpm typecheck # Run TypeScript type check +pnpm i18n:check # Verify translation key consistency + +# Database +pnpm db:generate # Generate Drizzle migrations +pnpm db:migrate # Run migrations +pnpm db:push # Push schema to database +pnpm db:studio # Open Drizzle Studio +pnpm seed:tools # Seed AI tools data + +# Admin +pnpm admin:setup # Create admin account + +# Content +pnpm generate:blog-manifest # Generate blog manifest +``` + +## Deployment + +### Vercel (Recommended) + +1. Push your code to GitHub +2. Import project in [Vercel](https://vercel.com) +3. Add environment variables +4. Deploy + +### Docker + +```bash +# Start PostgreSQL + app +docker compose up -d --build + +# Initialize database (run from host) +DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm db:push +DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm seed:tools +DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm admin:setup +``` + +### Other Platforms + +The template works with any platform supporting Node.js: +- Railway +- Render +- Self-hosted + +### Deployment Checklist + +- [ ] Set up PostgreSQL database (Supabase, Neon, or Vercel Postgres) +- [ ] Configure Resend for email +- [ ] Update `BETTER_AUTH_URL` and `NEXT_PUBLIC_APP_URL` with production domain +- [ ] Run `pnpm db:push` to initialize database +- [ ] Create admin account with `pnpm admin:setup` + +## Internationalization + +The template supports multiple languages via `next-intl`: + +- **Supported**: English (`en`), Chinese (`zh`) +- **Route Format**: English is the default locale without prefix (`/...`), Chinese uses `/zh/...` (`localePrefix: 'as-needed'`) +- **Translation Files**: `messages/en.json`, `messages/zh.json` +- **Consistency Check**: `pnpm i18n:check` + +### Adding a New Language + +1. Copy `messages/en.json` to `messages/{locale}.json` +2. Translate the content +3. Update `i18n.config.ts` + +> Note: UI copy is fully translatable via JSON files, but tool/category/tag **data** is stored as bilingual columns (`nameEn`/`nameZh`) in the database. Adding a third content language requires extending the schema and queries. + +## Roadmap + +- [ ] User tool submission with review workflow +- [ ] Tool ratings & comments +- [ ] Automated tool data import pipeline + +## Contributing + +We welcome contributions! Please feel free to submit a Pull Request. + +1. Fork the repository +2. Create your feature branch (`git checkout -b feature/amazing-feature`) +3. Commit your changes (`git commit -m 'Add some amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request + +## License + +This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details. + +--- + + + +## 项目概览 + +Toolso.AI 是一个开源的 AI 工具导航站,旨在帮助用户发现各类优秀的 AI 工具。基于 Next.js 16、React 19 和 TypeScript 构建,拥有现代化的响应式界面、强大的搜索和筛选功能、多语言支持,以及完善的后台管理系统。 + +### 核心特性 + +| 特性 | 描述 | 优势 | +|------|------|------| +| **AI 工具目录** | 分类展示 AI 工具 | 轻松发现和探索 | +| **搜索与筛选** | 强大的搜索和分类筛选 | 快速找到合适的工具 | +| **管理后台** | 工具和用户管理 | 轻松管理内容 | +| **收藏功能** | 登录用户可收藏工具 | 打造个人工具箱 | +| **Newsletter** | 页脚订阅(基于 Resend) | 沉淀你的用户 | +| **博客系统** | MDX 驱动的多语言博客 | SEO 优化的 AI 资讯 | +| **国际化** | next-intl 国际化 | 中英文开箱即用 | +| **身份认证** | Better Auth + Google OAuth | 用户账户和提交功能 | +| **主题切换** | 深色/浅色模式 | 舒适的浏览体验 | + +## 快速开始 + +### 前置要求 + +- Node.js 18+ +- pnpm 8+ +- PostgreSQL 数据库 + +### 安装步骤 + +```bash +# 克隆仓库 +git clone https://github.com/coolchange-ai/toolso-ai-open.git +cd toolso-ai-open + +# 安装依赖 +pnpm install + +# 设置环境变量 +cp .env.example .env.local + +# 推送数据库结构 +pnpm db:push + +# (可选)导入 50 个 AI 工具、10 个分类、30 个标签种子数据 +pnpm seed:tools + +# (可选)创建管理员账户 +pnpm admin:setup + +# 启动开发服务器 +pnpm dev +``` + +打开 [http://localhost:3000](http://localhost:3000) 查看应用。 + +### 环境变量配置 + +创建 `.env.local` 并配置: + +```env +# 必需配置 +DATABASE_URL="postgresql://user:password@host/db?sslmode=require" +BETTER_AUTH_SECRET="至少32字符的密钥" +BETTER_AUTH_URL="http://localhost:3000" +NEXT_PUBLIC_APP_URL="http://localhost:3000" + +# 邮件(认证功能必需) +RESEND_API_KEY="re_your_api_key" +RESEND_FROM_EMAIL="Your App " + +# 可选:Google OAuth +AUTH_GOOGLE_ID="your-google-client-id" +AUTH_GOOGLE_SECRET="your-google-client-secret" +``` + +完整配置请参考 [.env.example](.env.example)。 + +## 项目结构 + +``` +src/ +├── app/ +│ ├── [locale]/ # 国际化路由 +│ │ ├── (auth)/ # 认证页面 +│ │ ├── (marketing)/ # 公开页面(首页、博客、工具) +│ │ ├── (protected)/ # 用户仪表板、个人资料 +│ │ └── (admin)/ # 管理后台 +│ └── api/ # API 路由 +├── components/ # 可复用 UI 组件 +├── features/ # 功能模块 +│ ├── auth/ # 认证逻辑 +│ ├── admin/ # 管理后台组件 +│ ├── tools/ # AI 工具目录 +│ └── navigation/ # 导航组件 +├── lib/ # 核心工具库 +│ ├── auth.ts # Better Auth 配置 +│ ├── db/ # 数据库 Schema 和连接 +│ └── email.ts # 邮件工具 +└── emails/ # React Email 模板 + +messages/ # 国际化翻译文件 +public/ # 静态资源 +scripts/ # 构建和管理脚本 +``` + +## 技术栈 + +### 前端 +- **框架**: Next.js 16 (App Router) +- **UI 库**: React 19 +- **样式**: Tailwind CSS + Framer Motion +- **组件**: 自定义组件 + Radix UI +- **表单**: React Hook Form + Zod 验证 +- **主题**: next-themes (深色/浅色模式) + +### 后端 +- **身份认证**: Better Auth +- **数据库**: PostgreSQL + Drizzle ORM +- **邮件**: Resend +- **存储**: Cloudflare R2 / AWS S3 + +### 开发体验 +- **语言**: TypeScript (严格模式) +- **代码检查**: ESLint +- **包管理器**: pnpm + +## 可用脚本 + +```bash +pnpm dev # 启动开发服务器 +pnpm build # 构建生产版本 +pnpm start # 启动生产服务器 +pnpm lint # 运行 ESLint(flat config) +pnpm typecheck # TypeScript 类型检查 +pnpm i18n:check # 校验翻译键一致性 + +# 数据库 +pnpm db:generate # 生成 Drizzle 迁移 +pnpm db:migrate # 运行迁移 +pnpm db:push # 推送 schema 到数据库 +pnpm db:studio # 打开 Drizzle Studio +pnpm seed:tools # 导入工具种子数据 + +# 管理员 +pnpm admin:setup # 创建管理员账户 + +# 内容 +pnpm generate:blog-manifest # 生成博客清单 +``` + +## 部署指南 + +### Vercel(推荐) + +1. 将代码推送到 GitHub +2. 在 [Vercel](https://vercel.com) 导入项目 +3. 添加环境变量 +4. 部署 + +### Docker + +```bash +# 启动 PostgreSQL + 应用 +docker compose up -d --build + +# 初始化数据库(在宿主机执行) +DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm db:push +DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm seed:tools +DATABASE_URL=postgresql://toolso:toolso@localhost:5432/toolso pnpm admin:setup +``` + +### 其他平台 + +模板支持任何支持 Node.js 的平台: +- Railway +- Render +- 自托管 + +### 部署清单 + +- [ ] 设置 PostgreSQL 数据库(Supabase、Neon 或 Vercel Postgres) +- [ ] 配置 Resend 邮件服务 +- [ ] 更新 `BETTER_AUTH_URL` 和 `NEXT_PUBLIC_APP_URL` 为生产域名 +- [ ] 运行 `pnpm db:push` 初始化数据库 +- [ ] 使用 `pnpm admin:setup` 创建管理员账户 + +## 国际化 + +模板通过 `next-intl` 支持多语言: + +- **已支持**: 英文 (`en`)、中文 (`zh`) +- **路由格式**: 英文为默认语言不带前缀(`/...`),中文为 `/zh/...`(`localePrefix: 'as-needed'`) +- **翻译文件**: `messages/en.json`、`messages/zh.json` +- **一致性检查**: `pnpm i18n:check` + +### 添加新语言 + +1. 复制 `messages/en.json` 到 `messages/{语言代码}.json` +2. 翻译内容 +3. 更新 `i18n.config.ts` + +> 注意:UI 文案可完全通过 JSON 文件翻译,但工具/分类/标签的**数据**在数据库中以双语列(`nameEn`/`nameZh`)存储。新增第三种内容语言需要扩展 schema 和查询。 + +## Roadmap + +- [ ] 用户工具提交与审核工作流 +- [ ] 工具评分与评论 +- [ ] 自动化工具数据采集管线 + +## 贡献指南 + +欢迎贡献!请随时提交 Pull Request。 + +1. Fork 仓库 +2. 创建特性分支 (`git checkout -b feature/amazing-feature`) +3. 提交更改 (`git commit -m 'Add some amazing feature'`) +4. 推送到分支 (`git push origin feature/amazing-feature`) +5. 开启 Pull Request + +## 开源协议 + +本项目基于 Apache License 2.0 开源 - 详情请查看 [LICENSE](LICENSE) 文件。 + +--- + +
+ +## Related Projects + +| Project | Description | Link | +|---------|-------------|------| +| **Toolso.AI** | AI Tools Directory | [https://toolso.ai](https://toolso.ai) | +| **CoolChange.AI** | AI Development Studio | [https://coolchange.ai](https://coolchange.ai) | +| **chatPPT.app** | AI Presentation Generator | [https://chatppt.app](https://chatppt.app) | +| **AIHealthGuide** | AI Health Assistant | [https://aihealthguide.app](https://aihealthguide.app) | + +
+ +--- + +
+ +**Built with love by [CoolChange.AI](https://coolchange.ai)** + +
+ +If you find this project helpful, please consider giving it a star! + +
diff --git a/packages/core/bun.lock b/packages/core/bun.lock new file mode 100644 index 0000000..efc0790 --- /dev/null +++ b/packages/core/bun.lock @@ -0,0 +1,3000 @@ +{ + "lockfileVersion": 2, + "configVersion": 0, + "workspaces": { + "": { + "name": "nextjs", + "dependencies": { + "@aws-sdk/client-s3": "^3.958.0", + "@better-auth/client": "0.0.2-alpha.3", + "@hookform/resolvers": "^3.4.2", + "@mapbox/rehype-prism": "^0.9.0", + "@mdx-js/loader": "^3.0.1", + "@mdx-js/react": "^3.0.1", + "@next/mdx": "^14.2.3", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-slot": "^1.0.2", + "@react-email/components": "^0.5.3", + "@tabler/icons-react": "^3.5.0", + "@tailwindcss/typography": "^0.5.13", + "@tanstack/react-store": "^0.7.5", + "@types/mdx": "^2.0.13", + "@vercel/analytics": "^1.5.0", + "@vercel/speed-insights": "^1.2.0", + "better-auth": "^1.4.10", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cobe": "^0.6.3", + "date-fns": "^3.6.0", + "drizzle-kit": "^0.31.4", + "drizzle-orm": "^0.44.5", + "fast-glob": "^3.3.2", + "framer-motion": "^12", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "nanoid": "^5.1.6", + "next": "16.1.1", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "postgres": "^3.4.7", + "prettier": "^3.7.4", + "prismjs": "^1.29.0", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-email": "^4.2.11", + "react-hook-form": "^7.51.5", + "react-icons": "^5.2.1", + "react-markdown": "^10.1.0", + "react-wrap-balancer": "^1.1.1", + "reading-time": "^1.5.0", + "rehype-highlight": "^7.0.2", + "remark-gfm": "^4.0.0", + "resend": "^6.1.0", + "sonner": "^2.0.7", + "tailwind-merge": "^2.3.0", + "zod": "^3.23.8", + }, + "devDependencies": { + "@types/bun": "^1.4.2", + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "dotenv": "^17.2.2", + "eslint": "^9.39.5", + "eslint-config-next": "16.1.1", + "pg": "^8.16.3", + "playwright": "^1.57.0", + "png-to-ico": "^3.0.1", + "postcss": "^8", + "sharp": "^0.34.5", + "tailwindcss": "^3.4.1", + "tsx": "^4.20.5", + "typescript": "^5", + }, + }, + }, + "packages": { + "@aashutoshrathi/word-wrap": ["@aashutoshrathi/word-wrap@1.2.6", "", {}, "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA=="], + + "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], + + "@aws-sdk/checksums": ["@aws-sdk/checksums@3.1000.29", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-Dtu0gr4dnATZAPwEYbpCsG+MpLM7OAliy2gTepEFQwl1vZ6DL3QMH2FveMa3HLvPsOdhJsPRB3KtxVhph9T75A=="], + + "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.1127.0", "", { "dependencies": { "@aws-sdk/checksums": "^3.1000.29", "@aws-sdk/core": "^3.977.9", "@aws-sdk/credential-provider-node": "^3.972.82", "@aws-sdk/middleware-sdk-s3": "^3.972.75", "@aws-sdk/signature-v4-multi-region": "^3.996.46", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/fetch-http-handler": "^5.7.2", "@smithy/node-http-handler": "^4.11.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-0ZSAgmEda33xPqVPt+bx2KzrXV1cUCKRRVPGliLu+V7DzHPa04CqPSi1maGEM4O0LDP0iI6HRSW5ULloNwayNw=="], + + "@aws-sdk/core": ["@aws-sdk/core@3.977.9", "", { "dependencies": { "@aws-sdk/types": "^3.974.5", "@aws-sdk/xml-builder": "^3.972.40", "@aws/lambda-invoke-store": "^0.3.0", "@smithy/core": "^3.33.3", "@smithy/signature-v4": "^5.6.12", "@smithy/types": "^4.17.2", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-reqPFEQrZxDZpeGj4PFMepBeR5LGYHRqq/L0motTzgFkCRBA4rFdaVXDSLYyGHhxVz7sT2PDnPN9CluGSfgyJA=="], + + "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.70", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-H404B7dJl2mCrBqahDEYsanB0xhdDp6tXnXcTUnXmmpy2Q3J0Ho0bUajZ2jr/RdwzCyS59Gi8xXIFwPLGBl6Uw=="], + + "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.72", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/fetch-http-handler": "^5.7.2", "@smithy/node-http-handler": "^4.11.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-X98zYOrVOeuosCX+6ktf29FC2N2GHPLia7qv6mzPzTc+RPAuHWCDS++Z6JK7eGYqb/v6uaW7bAXaOvDBfol+0w=="], + + "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.973.15", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/credential-provider-env": "^3.972.70", "@aws-sdk/credential-provider-http": "^3.972.72", "@aws-sdk/credential-provider-login": "^3.972.77", "@aws-sdk/credential-provider-process": "^3.972.70", "@aws-sdk/credential-provider-sso": "^3.973.14", "@aws-sdk/credential-provider-web-identity": "^3.972.76", "@aws-sdk/nested-clients": "^3.997.44", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-Rykg6s5ceBuynMOGWgoowO4N+27JfnqXAnVaSunZl0hOO1XodSrxGNz6sCEbnmS0lAfQZDKyb3fbr46gSuv6Sg=="], + + "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.77", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/nested-clients": "^3.997.44", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-Jb59xfEISoN5mmbnA+HYqdtrSX3CgCtJoof+V5D8/TgUI56W63GEEd5Y58WijU3Ou6+WEgaLD1feVzaRXV5IDQ=="], + + "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.82", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.70", "@aws-sdk/credential-provider-http": "^3.972.72", "@aws-sdk/credential-provider-ini": "^3.973.15", "@aws-sdk/credential-provider-process": "^3.972.70", "@aws-sdk/credential-provider-sso": "^3.973.14", "@aws-sdk/credential-provider-web-identity": "^3.972.76", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-znDkEOGXB8W3kG1LJUKP3foBZY/9qLM0eil/DxWXSp37XsdsRLQHE/d/OaCGGVgKpA6znR38h/+INk8do1FjiA=="], + + "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.70", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-2ry03fGRJr4sV3jI+ocjj5JqALnFD6ymM5KiNCDZMvq8bX2GSbE0vji4aM43TVCl2nXqqLRZaUxdq/KeWRAY4Q=="], + + "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.973.14", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/nested-clients": "^3.997.44", "@aws-sdk/token-providers": "3.1116.0", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-jkhg/8ocAAoc0RFyLMhCw+/zZh7gystQgd4F4hznNa8P4Cc501PQmxd+jGLiMHodPJ+7Zv/3znM62gZojyasmA=="], + + "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.76", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/nested-clients": "^3.997.44", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-d3AGyVu759PGr35mEB2s22xxlNEA5rpdxtSPJthfPFJvoQ8dt357iVPECqWfUxXp1toJAvKmbtcIYVGigaGsCA=="], + + "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.972.75", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/signature-v4-multi-region": "^3.996.46", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-wMIsNumRVKaNMKhvU/s9VrdEwE8S6gSzXp4RygFG5BEMnGkkXf8cjh8zf7cKJBpUDpqTWqwbz5isEgp9rH6Lng=="], + + "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.997.44", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/signature-v4-multi-region": "^3.996.46", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/fetch-http-handler": "^5.7.2", "@smithy/node-http-handler": "^4.11.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-NhEgryjlBF9w38ZXqGymQV28IhkYa1mKhlbYnqIis57AYwWGVYfUPgg/qC2rLRqOUfblxx++irvju10kVTa8Vw=="], + + "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.46", "", { "dependencies": { "@aws-sdk/types": "^3.974.5", "@smithy/signature-v4": "^5.6.12", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-L+2xZTye/2T96f3lwCws0Zw6GG2JHZW9e8FpVgGBeeExSKyeoZ6CWRpBml/7DNiK/O26jrgPM9F+Ay8VkgzUWQ=="], + + "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1116.0", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/nested-clients": "^3.997.44", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-ygIivKqh8aHzNkucOCXHyIBgBpLPfrSI0mCqXF+vLBsPTUKqj0VSqAY0GFPe7lQl4HntjOcQ+KSyS7oUV2C54Q=="], + + "@aws-sdk/types": ["@aws-sdk/types@3.974.5", "", { "dependencies": { "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-LkwLL2BLbC6wNNm4JaH9mbEqBMdOZCct6VAYqhdN4U1xrWM+fUJQEfbHwQgDypapOWTRtlk25akb5afM0P8CIQ=="], + + "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.40", "", { "dependencies": { "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-wlFmCIGUlwF4zx/kncw+bmxTQh1HeSJq4mYV/V5cZUSJadDP3kXvGW8Rn21cimj/7y9ju+47oYWXi97vF7czaA=="], + + "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.3.0", "", {}, "sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ=="], + + "@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], + + "@babel/compat-data": ["@babel/compat-data@7.29.7", "", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="], + + "@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], + + "@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.29.7", "", {}, "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="], + + "@babel/helpers": ["@babel/helpers@7.29.7", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="], + + "@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="], + + "@babel/runtime": ["@babel/runtime@7.24.4", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA=="], + + "@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], + + "@babel/traverse": ["@babel/traverse@7.29.8", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.8", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg=="], + + "@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], + + "@better-auth/client": ["@better-auth/client@0.0.2-alpha.3", "", { "dependencies": { "@better-fetch/fetch": "^0.0.1", "h3": "^1.11.1", "zustand": "^4.5.2" } }, "sha512-onSsx9Dj0swtQQqD3C/9d73r27T+86aihYQRZcGQVQQVIF4uVhaJSH0jQxF/Be8Hy6VX+br0lIl6oIHYlOseFg=="], + + "@better-auth/core": ["@better-auth/core@1.7.3", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.41.1", "@standard-schema/spec": "^1.1.0", "zod": "^4.5.4" }, "peerDependencies": { "@better-auth/utils": "0.4.2", "@better-fetch/fetch": "1.3.1", "@cloudflare/workers-types": ">=4", "@opentelemetry/api": "^1.9.0", "better-call": "1.4.0", "jose": "^6.1.0", "kysely": "^0.28.5 || ^0.29.0", "nanostores": "^1.0.1" }, "optionalPeers": ["@cloudflare/workers-types", "@opentelemetry/api"] }, "sha512-JdP7lOkyE83jgjn7RilJj1XvZ7n2JjRsErKJuaXchjyuNo6cf1iVd3GtbhAtiUyJJkWdk8yL+LaUBKT80H0zLA=="], + + "@better-auth/drizzle-adapter": ["@better-auth/drizzle-adapter@1.7.3", "", { "peerDependencies": { "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "drizzle-orm": "^0.45.2 || >=1.0.0-rc.1 <2.0.0" }, "optionalPeers": ["drizzle-orm"] }, "sha512-S+nQRlxbUhkR43LrSv8c98ZvOvmv3nrtOnHkiZXkdDkr60PWp7maC2cqgzZ2C9exCC1a+4TugJlx2jRL+r+/9A=="], + + "@better-auth/kysely-adapter": ["@better-auth/kysely-adapter@1.7.3", "", { "peerDependencies": { "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "kysely": "^0.28.17 || ^0.29.0" }, "optionalPeers": ["kysely"] }, "sha512-UIsyJMIrjUnT+yTaS6dkCxYYmtPwxFHxwSJ8+CLty2II5w9BewlDxDA0/QzhoL/InYCPxQ5Y6xIgLHZG1dhwRA=="], + + "@better-auth/memory-adapter": ["@better-auth/memory-adapter@1.7.3", "", { "peerDependencies": { "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2" } }, "sha512-WdLANFY/QWC3G351RCzxU+Y9YlW+BQ1oG9NwBTSOUWQw5rZ87ws+weU8tvAMO7sQ4C9gKIlkOKBKUKXrSt91Tw=="], + + "@better-auth/mongo-adapter": ["@better-auth/mongo-adapter@1.7.3", "", { "peerDependencies": { "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "mongodb": "^6.0.0 || ^7.0.0" }, "optionalPeers": ["mongodb"] }, "sha512-YL9m01tNogmFmRvOWJ46M9WwE6HirCXHDell29mtsQB/Qs1TPNLrgj7ybGMMGhQuyj6S218+8Wbls8m9s+i8RQ=="], + + "@better-auth/prisma-adapter": ["@better-auth/prisma-adapter@1.7.3", "", { "peerDependencies": { "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["@prisma/client", "prisma"] }, "sha512-TJ/DhlU7oLzrC626/1wfYA1Pl+lVsXa/zXBZ8d7Rlc2YO5fGd5fsAYJdRrYMyA51iZEo+rWLXMhZ0cez1BamsQ=="], + + "@better-auth/telemetry": ["@better-auth/telemetry@1.7.3", "", { "peerDependencies": { "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "@better-fetch/fetch": "1.3.1" } }, "sha512-aixgHbJhGvS8PRczX/LR3murYyBnIvOGmJw37ZZBMg6ZtLR/UBJAkufbDi1HYn5THSuTJ3D5DtY85Ahh/ABQtw=="], + + "@better-auth/utils": ["@better-auth/utils@0.4.2", "", { "dependencies": { "@noble/hashes": "^2.0.1" } }, "sha512-AUxrvu+HaaODsUyzDxFgwd/8RZ1yZaYo42LXKSrU2oGgR38pS1ij8nqQKNgtTWoYGpNevNXtCfgTy6loHveW9A=="], + + "@better-fetch/fetch": ["@better-fetch/fetch@0.0.1", "", {}, "sha512-Ut1vj03InePRz4svv4ZASgVO+TEtO+sty3hedv/6nf10qwYcVBLFypAA6i0HlUC3r+0KXbniJS2sAdoEY31HhQ=="], + + "@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="], + + "@eloqnt/config": ["@eloqnt/config@0.1.0", "", {}, "sha512-SLR6ZSHxu6XdZtmOz3xRmC3gsY/sCzqtLMD1gxbW2I3XXPBbupwL5RZbkLU/NcZm74AKZrIUPfz3CtEJfxUKqQ=="], + + "@eloqnt/format-json": ["@eloqnt/format-json@0.1.0", "", { "dependencies": { "@eloqnt/config": "^0.1.0" } }, "sha512-4Pkb+HyzgWNJXoU48aJhUyNZSjZvMGooPCNG1ZFmBm55xTiNNPQCNXH66Ob6sXS6RvbWZrRpCf+Uo/Jz9K9g+A=="], + + "@eloqnt/format-po": ["@eloqnt/format-po@0.1.0", "", { "dependencies": { "@eloqnt/config": "^0.1.0", "po-parser": "^2.2.0" } }, "sha512-odgtuICWs67GdkNqY51/d2vaIukuOdlGalKASUGkI5c4cyWOmv/WIVyk5gZyn3xr614RzwWp57s9WB40lRLlBw=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], + + "@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="], + + "@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.28.2", "", { "os": "android", "cpu": "arm" }, "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.28.2", "", { "os": "android", "cpu": "x64" }, "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.2", "", { "os": "linux", "cpu": "arm" }, "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.2", "", { "os": "linux", "cpu": "x64" }, "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.2", "", { "os": "none", "cpu": "x64" }, "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.10.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], + + "@eslint/config-array": ["@eslint/config-array@0.21.2", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.5" } }, "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], + + "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.7", "", { "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.3.2", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" } }, "sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw=="], + + "@eslint/js": ["@eslint/js@9.39.5", "", {}, "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], + + "@formatjs/fast-memoize": ["@formatjs/fast-memoize@3.1.7", "", {}, "sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA=="], + + "@formatjs/icu-messageformat-parser": ["@formatjs/icu-messageformat-parser@3.5.17", "", { "dependencies": { "@formatjs/icu-skeleton-parser": "2.1.11" } }, "sha512-cN9jhVqT7u0K9tix43fhjoUwL0nazyW6zsNIXs2QdPADr+nurPfYyssUiMqcSCGlPcCiqnYVxgSn7zBSuI+5Bg=="], + + "@formatjs/icu-skeleton-parser": ["@formatjs/icu-skeleton-parser@2.1.11", "", {}, "sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA=="], + + "@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.8.13", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.7" } }, "sha512-kHEAFOkeJSPNi7c5PaKaRjxcBrJwzzt81ifUu+8uve1EDW/VJl83KsxmqgqNZLzcFEhSliZGvx3+pk/RH0IOmg=="], + + "@hookform/resolvers": ["@hookform/resolvers@3.4.2", "", { "peerDependencies": { "react-hook-form": "^7.0.0" } }, "sha512-1m9uAVIO8wVf7VCDAGsuGA0t6Z3m6jVGAN50HkV9vYLl0yixKK/Z1lr01vaRvYCkIKGoy1noVRxMzQYb4y/j1Q=="], + + "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], + + "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="], + + "@humanfs/types": ["@humanfs/types@0.15.0", "", {}, "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], + + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], + + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], + + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], + + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], + + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="], + + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="], + + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="], + + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="], + + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="], + + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="], + + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="], + + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="], + + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="], + + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="], + + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="], + + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="], + + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="], + + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="], + + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="], + + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="], + + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], + + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], + + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], + + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], + + "@isaacs/cliui": ["@isaacs/cliui@9.0.0", "", {}, "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.5", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.6", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.4.15", "", {}, "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + + "@mapbox/rehype-prism": ["@mapbox/rehype-prism@0.9.0", "", { "dependencies": { "hast-util-to-string": "^1.0.4", "refractor": "^3.4.0", "unist-util-visit": "^2.0.3" } }, "sha512-ypmEaqzdrqSon5NJdPqTh79qmPK8ajAqIU9mdFhuWn3T4B/RT2nt3yH2JPcou1/Gx8DvSgJ+XP+fy60e8h3mpQ=="], + + "@mdx-js/loader": ["@mdx-js/loader@3.0.1", "", { "dependencies": { "@mdx-js/mdx": "^3.0.0", "source-map": "^0.7.0" }, "peerDependencies": { "webpack": ">=5" } }, "sha512-YbYUt7YyEOdFxhyuCWmLKf5vKhID/hJAojEUnheJk4D8iYVLFQw+BAoBWru/dHGch1omtmZOPstsmKPyBF68Tw=="], + + "@mdx-js/mdx": ["@mdx-js/mdx@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-to-js": "^2.0.0", "estree-walker": "^3.0.0", "hast-util-to-estree": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "periscopic": "^3.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA=="], + + "@mdx-js/react": ["@mdx-js/react@3.0.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A=="], + + "@next/env": ["@next/env@16.1.1", "", {}, "sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA=="], + + "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.1.1", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-Ovb/6TuLKbE1UiPcg0p39Ke3puyTCIKN9hGbNItmpQsp+WX3qrjO3WaMVSi6JHr9X1NrmthqIguVHodMJbh/dw=="], + + "@next/mdx": ["@next/mdx@14.2.3", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-oVz7BWpoLQ9dKvCKxPIX9X6BILPTrpTJnYDn2lAsZvK7J9Ela6xNm57vNwgZ8q7xw1THSDdSlbPNgIalM7U/+A=="], + + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.1.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JS3m42ifsVSJjSTzh27nW+Igfha3NdBOFScr9C80hHGrWx55pTrVL23RJbqir7k7/15SKlrLHhh/MQzqBBYrQA=="], + + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.1.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-hbyKtrDGUkgkyQi1m1IyD3q4I/3m9ngr+V93z4oKHrPcmxwNL5iMWORvLSGAf2YujL+6HxgVvZuCYZfLfb4bGw=="], + + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-/fvHet+EYckFvRLQ0jPHJCUI5/B56+2DpI1xDSvi80r/3Ez+Eaa2Yq4tJcRTaB1kqj/HrYKn8Yplm9bNoMJpwQ=="], + + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-MFHrgL4TXNQbBPzkKKur4Fb5ICEJa87HM7fczFs2+HWblM7mMLdco3dvyTI+QmLBU9xgns/EeeINSZD6Ar+oLg=="], + + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-20bYDfgOQAPUkkKBnyP9PTuHiJGM7HzNBbuqmD0jiFVZ0aOldz+VnJhbxzjcSabYsnNjMPsE0cyzEudpYxsrUQ=="], + + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-9pRbK3M4asAHQRkwaXwu601oPZHghuSC8IXNENgbBSyImHv/zY4K5udBusgdHkvJ/Tcr96jJwQYOll0qU8+fPA=="], + + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.1.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-bdfQkggaLgnmYrFkSQfsHfOhk/mCYmjnrbRCGgkMcoOBZ4n+TRRSLmT/CU5SATzlBJ9TpioUyBW/vWFXTqQRiA=="], + + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.1.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Ncwbw2WJ57Al5OX0k4chM68DKhEPlrXBaSXDCi2kPi5f4d8b3ejr3RRJGfKBLrn2YJL5ezNS7w2TZLHSti8CMw=="], + + "@noble/ciphers": ["@noble/ciphers@2.4.0", "", {}, "sha512-AnjFn0Jv92laAkvMrghlFZq4qQCIN/4DxFV/eooqtC2YTjB7kBeLMS2T9KJX4Dn+ZVXLOwK0lSgqDtx9gvxtiw=="], + + "@noble/hashes": ["@noble/hashes@2.4.0", "", {}, "sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.43.0", "", {}, "sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg=="], + + "@parcel/watcher": ["@parcel/watcher@2.6.0", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.4" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.6.0", "@parcel/watcher-darwin-arm64": "2.6.0", "@parcel/watcher-darwin-x64": "2.6.0", "@parcel/watcher-freebsd-x64": "2.6.0", "@parcel/watcher-linux-arm-glibc": "2.6.0", "@parcel/watcher-linux-arm-musl": "2.6.0", "@parcel/watcher-linux-arm64-glibc": "2.6.0", "@parcel/watcher-linux-arm64-musl": "2.6.0", "@parcel/watcher-linux-x64-glibc": "2.6.0", "@parcel/watcher-linux-x64-musl": "2.6.0", "@parcel/watcher-win32-arm64": "2.6.0", "@parcel/watcher-win32-x64": "2.6.0" } }, "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w=="], + + "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.6.0", "", { "os": "android", "cpu": "arm64" }, "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA=="], + + "@parcel/watcher-darwin-arm64": ["@parcel/watcher-darwin-arm64@2.6.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw=="], + + "@parcel/watcher-darwin-x64": ["@parcel/watcher-darwin-x64@2.6.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw=="], + + "@parcel/watcher-freebsd-x64": ["@parcel/watcher-freebsd-x64@2.6.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ=="], + + "@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.6.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg=="], + + "@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.6.0", "", { "os": "linux", "cpu": "arm" }, "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw=="], + + "@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.6.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g=="], + + "@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.6.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA=="], + + "@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.6.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A=="], + + "@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.6.0", "", { "os": "linux", "cpu": "x64" }, "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw=="], + + "@parcel/watcher-win32-arm64": ["@parcel/watcher-win32-arm64@2.6.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ=="], + + "@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.6.0", "", { "os": "win32", "cpu": "x64" }, "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A=="], + + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.0.1", "", { "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw=="], + + "@radix-ui/react-label": ["@radix-ui/react-label@2.0.2", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ=="], + + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@1.0.3", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-slot": "1.0.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g=="], + + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.0.2", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "1.0.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg=="], + + "@react-email/body": ["@react-email/body@0.1.0", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-o1bcSAmDYNNHECbkeyceCVPGmVsYvT+O3sSO/Ct7apKUu3JphTi31hu+0Nwqr/pgV5QFqdoT5vdS3SW5DJFHgQ=="], + + "@react-email/button": ["@react-email/button@0.2.0", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-8i+v6cMxr2emz4ihCrRiYJPp2/sdYsNNsBzXStlcA+/B9Umpm5Jj3WJKYpgTPM+aeyiqlG/MMI1AucnBm4f1oQ=="], + + "@react-email/code-block": ["@react-email/code-block@0.1.0", "", { "dependencies": { "prismjs": "^1.30.0" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-jSpHFsgqnQXxDIssE4gvmdtFncaFQz5D6e22BnVjcCPk/udK+0A9jRwGFEG8JD2si9ZXBmU4WsuqQEczuZn4ww=="], + + "@react-email/code-inline": ["@react-email/code-inline@0.0.5", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA=="], + + "@react-email/column": ["@react-email/column@0.0.13", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ=="], + + "@react-email/components": ["@react-email/components@0.5.7", "", { "dependencies": { "@react-email/body": "0.1.0", "@react-email/button": "0.2.0", "@react-email/code-block": "0.1.0", "@react-email/code-inline": "0.0.5", "@react-email/column": "0.0.13", "@react-email/container": "0.0.15", "@react-email/font": "0.0.9", "@react-email/head": "0.0.12", "@react-email/heading": "0.0.15", "@react-email/hr": "0.0.11", "@react-email/html": "0.0.11", "@react-email/img": "0.0.11", "@react-email/link": "0.0.12", "@react-email/markdown": "0.0.16", "@react-email/preview": "0.0.13", "@react-email/render": "1.4.0", "@react-email/row": "0.0.12", "@react-email/section": "0.0.16", "@react-email/tailwind": "1.2.2", "@react-email/text": "0.1.5" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-ECyVoyDcev2FSQ7C0buXaIJ0+6MRDXNUbCOZwBRrlLdCCRjap2b4+MHrYSTXFzo5kqfjjRoyo/2PbJXFQni67g=="], + + "@react-email/container": ["@react-email/container@0.0.15", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg=="], + + "@react-email/font": ["@react-email/font@0.0.9", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw=="], + + "@react-email/head": ["@react-email/head@0.0.12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA=="], + + "@react-email/heading": ["@react-email/heading@0.0.15", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-xF2GqsvBrp/HbRHWEfOgSfRFX+Q8I5KBEIG5+Lv3Vb2R/NYr0s8A5JhHHGf2pWBMJdbP4B2WHgj/VUrhy8dkIg=="], + + "@react-email/hr": ["@react-email/hr@0.0.11", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-S1gZHVhwOsd1Iad5IFhpfICwNPMGPJidG/Uysy1AwmspyoAP5a4Iw3OWEpINFdgh9MHladbxcLKO2AJO+cA9Lw=="], + + "@react-email/html": ["@react-email/html@0.0.11", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA=="], + + "@react-email/img": ["@react-email/img@0.0.11", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-aGc8Y6U5C3igoMaqAJKsCpkbm1XjguQ09Acd+YcTKwjnC2+0w3yGUJkjWB2vTx4tN8dCqQCXO8FmdJpMfOA9EQ=="], + + "@react-email/link": ["@react-email/link@0.0.12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ=="], + + "@react-email/markdown": ["@react-email/markdown@0.0.16", "", { "dependencies": { "marked": "^15.0.12" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-KSUHmoBMYhvc6iGwlIDkm0DRGbGQ824iNjLMCJsBVUoKHGQYs7F/N3b1tnS1YzRUX+GwHIexSsHuIUEi1m+8OQ=="], + + "@react-email/preview": ["@react-email/preview@0.0.13", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-F7j9FJ0JN/A4d7yr+aw28p4uX7VLWs7hTHtLo7WRyw4G+Lit6Zucq4UWKRxJC8lpsUdzVmG7aBJnKOT+urqs/w=="], + + "@react-email/render": ["@react-email/render@1.4.0", "", { "dependencies": { "html-to-text": "^9.0.5", "prettier": "^3.5.3", "react-promise-suspense": "^0.3.4" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-ZtJ3noggIvW1ZAryoui95KJENKdCzLmN5F7hyZY1F/17B1vwzuxHB7YkuCg0QqHjDivc5axqYEYdIOw4JIQdUw=="], + + "@react-email/row": ["@react-email/row@0.0.12", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ=="], + + "@react-email/section": ["@react-email/section@0.0.16", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w=="], + + "@react-email/tailwind": ["@react-email/tailwind@1.2.2", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-heO9Khaqxm6Ulm6p7HQ9h01oiiLRrZuuEQuYds/O7Iyp3c58sMVHZGIxiRXO/kSs857NZQycpjewEVKF3jhNTw=="], + + "@react-email/text": ["@react-email/text@0.1.5", "", { "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-o5PNHFSE085VMXayxH+SJ1LSOtGsTv+RpNKnTiJDrJUwoBu77G3PlKOsZZQHCNyD28WsQpl9v2WcJLbQudqwPg=="], + + "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], + + "@schummar/icu-type-parser": ["@schummar/icu-type-parser@1.21.5", "", {}, "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw=="], + + "@selderee/plugin-htmlparser2": ["@selderee/plugin-htmlparser2@0.11.0", "", { "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" } }, "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ=="], + + "@smithy/core": ["@smithy/core@3.33.3", "", { "dependencies": { "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-CsOeKq/9kA3y6VJHt+/+VTCtBaxJ4OTFpgrjIUhPpDIKxBci1k2bJaQASF2h/ELWrulGp+t97DZ0mevfAD8idg=="], + + "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.5.2", "", { "dependencies": { "@smithy/core": "^3.33.2", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg=="], + + "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.8.0", "", { "dependencies": { "@smithy/core": "^3.33.3", "@smithy/types": "^4.18.0", "tslib": "^2.6.2" } }, "sha512-ycSJu3tFAQ4v04CBB0agqFMVsSQ1iG3yw+SpgxRqKfaURpQD4CZ8Wn0zPMmSnOuTpTh65Vz+EA0rMrw089wvkA=="], + + "@smithy/node-http-handler": ["@smithy/node-http-handler@4.12.1", "", { "dependencies": { "@smithy/core": "^3.33.3", "@smithy/types": "^4.18.0", "tslib": "^2.6.2" } }, "sha512-ThMkboGeONWXAelq9FvGsuJC4rOi+qyC4/zhUF58xYpxUg5sQKx2VXZYJmtNjr4dSuBJ1HeJXETQILCz3wOHvw=="], + + "@smithy/signature-v4": ["@smithy/signature-v4@5.7.3", "", { "dependencies": { "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-7ImGm+FkHRLcBaRttIAMZ6bzJZWb2cJGoYjq46F2UjycujWzrL9GEN9h4w7eQyXJYnltrUhxbbieBAIRrdqpow=="], + + "@smithy/types": ["@smithy/types@4.18.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-CgB6HHWer/vrKps24ulRIbpcpb7K4xAU7SkZ7YHzBPlwHsvsrCJFEXK421s+cJzX+ZrqtA/TuU5w1HzI7k9N8A=="], + + "@socket.io/component-emitter": ["@socket.io/component-emitter@3.1.2", "", {}, "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="], + + "@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "@swc/core": ["@swc/core@1.16.2", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.28" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.16.2", "@swc/core-darwin-x64": "1.16.2", "@swc/core-linux-arm-gnueabihf": "1.16.2", "@swc/core-linux-arm64-gnu": "1.16.2", "@swc/core-linux-arm64-musl": "1.16.2", "@swc/core-linux-ppc64-gnu": "1.16.2", "@swc/core-linux-s390x-gnu": "1.16.2", "@swc/core-linux-x64-gnu": "1.16.2", "@swc/core-linux-x64-musl": "1.16.2", "@swc/core-win32-arm64-msvc": "1.16.2", "@swc/core-win32-ia32-msvc": "1.16.2", "@swc/core-win32-x64-msvc": "1.16.2" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-95I4kiSMeveI/Mhi+tE4fiWcWLUMfzfKrk0jtr8LRMqHgOgq+xHS+zExkDqoO4b5OeeuXHMWVdD5MeP3X6sULw=="], + + "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.16.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-i/j0HNbnn79qnTVPicvay92Nark8fW8NQqn1e2mGERjUXNpBV0+SwQxlRpk2zBhn6laJ8PDI6Kn1nHZhnz3LCA=="], + + "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.16.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-HrwqHyEyHVXO3qTk8EkNK7/b6sOZSEoNh+pot6RdE5x0LbNqfo8LtJUvi3UTXr+5ja/o5HbJdW80eCXo+NjbiA=="], + + "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.16.2", "", { "os": "linux", "cpu": "arm" }, "sha512-MdXi83Z/gGp1LIrg+h7HKxiul/z/Bty/ZJSvYAFqDl9zteC1XLSAZdScquKtXPp50rdyXqritTDCqQBhwVfZKA=="], + + "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.16.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-/jcTmK6Ktz3owM3YtiKvjofV6p3VpHnYzTIrOGwDIOsDigRAAVuZ8east33wYO/7UTdKYFlyHNnJNT0WJqOA3Q=="], + + "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.16.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-4gFarKaFnlJTSlJYKmMhV4u+3YE4uYfiydpBoYjmgQhCf9lAieOq+WilZaK9vVSHeqLuQpTEiGULZqAdsRX5Dw=="], + + "@swc/core-linux-ppc64-gnu": ["@swc/core-linux-ppc64-gnu@1.16.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-syqSLGd6KlZ1PciNzs6bIUlhOuFztZufebOHaERjc4N4SqNZxyqYd4I+jj/EfOYnpe0kNjccn9HJLN1p5dz3+w=="], + + "@swc/core-linux-s390x-gnu": ["@swc/core-linux-s390x-gnu@1.16.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-ZBBLK+ewGyXLzWeMS7wbKtWBdnif6etn7xvPY/iOfbdsjX/+bgkp1pQt2lWF2wlu2hXYZuhJ/tHZE/QR8/apzg=="], + + "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.16.2", "", { "os": "linux", "cpu": "x64" }, "sha512-LyHJgxCA4Tje0ysBMbEb0tt/ie8kgUKoFE3JAKFhpevmTmhYEoC0H9s47WuDsqiFckF1ITUguZIXJG6K5e0dvg=="], + + "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.16.2", "", { "os": "linux", "cpu": "x64" }, "sha512-PghXJlVM1cgtLfNUR1vxFo1z+PDRAe8cWAJlZZ7spmeiN7BospGXg/MHUg7oNSgwSX7Zo//YKv9P5yD9apsFJQ=="], + + "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.16.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-StTOSefYBxemvNYYUI3UmO1a8y+hSPjjfHogC2TEHL+Z1PlEBim/XtLas5rS04jAzT9RrNmbtX911SZ42H9jSQ=="], + + "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.16.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-fycER209DYIzsibpTMC+chND05OfOjgztWL9U8OE6/uUlsOUZH3eh98isBLEnOymYUhlJLEt5++W1+KL/FOh5Q=="], + + "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.16.2", "", { "os": "win32", "cpu": "x64" }, "sha512-cSd1z6ivSrJPVr+moVwOHWjeKy6TpO4/Shwcv5KCrKYXCccxwh4pRy1C3fDioNx2PF1jPZWHKZjtXt+Be9VbaQ=="], + + "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], + + "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], + + "@swc/types": ["@swc/types@0.1.28", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw=="], + + "@tabler/icons": ["@tabler/icons@3.5.0", "", {}, "sha512-I53dC3ZSHQ2MZFGvDYJelfXm91L2bTTixS4w5jTAulLhHbCZso5Bih4Rk/NYZxlngLQMKHvEYwZQ+6w/WluKiA=="], + + "@tabler/icons-react": ["@tabler/icons-react@3.5.0", "", { "dependencies": { "@tabler/icons": "3.5.0" }, "peerDependencies": { "react": ">= 16" } }, "sha512-bn05XKZV3ZfOv5Jr1FCTmVPOQGBVJoA4NefrnR919rqg6WGXAa08NovONHJGSuMxXUMV3b9Cni85diIW/E9yuw=="], + + "@tailwindcss/typography": ["@tailwindcss/typography@0.5.13", "", { "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw=="], + + "@tanstack/react-store": ["@tanstack/react-store@0.7.7", "", { "dependencies": { "@tanstack/store": "0.7.7", "use-sync-external-store": "^1.5.0" }, "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" } }, "sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg=="], + + "@tanstack/store": ["@tanstack/store@0.7.7", "", {}, "sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ=="], + + "@types/acorn": ["@types/acorn@4.0.6", "", { "dependencies": { "@types/estree": "*" } }, "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ=="], + + "@types/bun": ["@types/bun@1.4.2", "", { "dependencies": { "bun-types": "1.4.2" } }, "sha512-GimotNn7+ZV0uVArItBbriZsR1oNf0+WTzPkdcFrzShI7k2norL0uzEaJT8T33dWr7O/c9ZDuAFQrctKCi72oQ=="], + + "@types/cors": ["@types/cors@2.8.19", "", { "dependencies": { "@types/node": "*" } }, "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg=="], + + "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], + + "@types/eslint": ["@types/eslint@8.56.10", "", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ=="], + + "@types/eslint-scope": ["@types/eslint-scope@3.7.7", "", { "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg=="], + + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + + "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], + + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], + + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + + "@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="], + + "@types/ms": ["@types/ms@0.7.34", "", {}, "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="], + + "@types/node": ["@types/node@20.12.7", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg=="], + + "@types/react": ["@types/react@19.2.18", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w=="], + + "@types/react-dom": ["@types/react-dom@19.2.7", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-I8bPpDLcHBv1qiIiXDCy71Rt8eQDKJP0sMSWJphDdAcdqiJ1sGpZamavoEIRZmYzjia9LuEb2HlYdDpmoENpvQ=="], + + "@types/unist": ["@types/unist@2.0.10", "", {}, "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="], + + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.70.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.70.0", "@typescript-eslint/type-utils": "8.70.0", "@typescript-eslint/utils": "8.70.0", "@typescript-eslint/visitor-keys": "8.70.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.70.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-/v8HZt6RlyIZxB3ntehELOcUcfxKPVGWXnQdJuHRmzrqgF8nQypcC/oxGW+Ot4VGKDq81XugPKxx0n5PBtf9PA=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.70.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.70.0", "@typescript-eslint/types": "8.70.0", "@typescript-eslint/typescript-estree": "8.70.0", "@typescript-eslint/visitor-keys": "8.70.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-zYvrmj9Yxd63UGaXw+kdt6A0F0s0qveJyuatIM77bYC2DE4pgmg7a50u8LR7PRtXd0x+h+Tl3eXabGm06SWd3Q=="], + + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.70.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.70.0", "@typescript-eslint/types": "^8.70.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.70.0", "", { "dependencies": { "@typescript-eslint/types": "8.70.0", "@typescript-eslint/visitor-keys": "8.70.0" } }, "sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ=="], + + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.70.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.70.0", "", { "dependencies": { "@typescript-eslint/types": "8.70.0", "@typescript-eslint/typescript-estree": "8.70.0", "@typescript-eslint/utils": "8.70.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-NUMKIhYVaVIVLnRL9CRt+VVcuLgSHUCpXn4/+K8wql+vdInUzvx8BjUO1oJ7cG9shjFJKtF8F8Hh2kCh3/KBVw=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.70.0", "", {}, "sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.70.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.70.0", "@typescript-eslint/tsconfig-utils": "8.70.0", "@typescript-eslint/types": "8.70.0", "@typescript-eslint/visitor-keys": "8.70.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.70.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.70.0", "@typescript-eslint/types": "8.70.0", "@typescript-eslint/typescript-estree": "8.70.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-oZmtKJz/4fufZ2p3+Cn3ijEojcdfR+1zYDH2xKYrEly0dR/Q/1xUPRCOlKGxod78nWlU2UnDe09GZ3TaknBFGA=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.70.0", "", { "dependencies": { "@typescript-eslint/types": "8.70.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.2.0", "", {}, "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="], + + "@vercel/analytics": ["@vercel/analytics@1.6.1", "", { "peerDependencies": { "@remix-run/react": "^2", "@sveltejs/kit": "^1 || ^2", "next": ">= 13", "react": "^18 || ^19 || ^19.0.0-rc", "svelte": ">= 4", "vue": "^3", "vue-router": "^4" }, "optionalPeers": ["@remix-run/react", "@sveltejs/kit", "next", "react", "svelte", "vue", "vue-router"] }, "sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg=="], + + "@vercel/speed-insights": ["@vercel/speed-insights@1.3.1", "", { "peerDependencies": { "@sveltejs/kit": "^1 || ^2", "next": ">= 13", "react": "^18 || ^19 || ^19.0.0-rc", "svelte": ">= 4", "vue": "^3", "vue-router": "^4" }, "optionalPeers": ["@sveltejs/kit", "next", "react", "svelte", "vue", "vue-router"] }, "sha512-PbEr7FrMkUrGYvlcLHGkXdCkxnylCWePx7lPxxq36DNdfo9mcUjLOmqOyPDHAOgnfqgGGdmE3XI9L/4+5fr+vQ=="], + + "@webassemblyjs/ast": ["@webassemblyjs/ast@1.12.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg=="], + + "@webassemblyjs/floating-point-hex-parser": ["@webassemblyjs/floating-point-hex-parser@1.11.6", "", {}, "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw=="], + + "@webassemblyjs/helper-api-error": ["@webassemblyjs/helper-api-error@1.11.6", "", {}, "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q=="], + + "@webassemblyjs/helper-buffer": ["@webassemblyjs/helper-buffer@1.12.1", "", {}, "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw=="], + + "@webassemblyjs/helper-numbers": ["@webassemblyjs/helper-numbers@1.11.6", "", { "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g=="], + + "@webassemblyjs/helper-wasm-bytecode": ["@webassemblyjs/helper-wasm-bytecode@1.11.6", "", {}, "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA=="], + + "@webassemblyjs/helper-wasm-section": ["@webassemblyjs/helper-wasm-section@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/wasm-gen": "1.12.1" } }, "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g=="], + + "@webassemblyjs/ieee754": ["@webassemblyjs/ieee754@1.11.6", "", { "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg=="], + + "@webassemblyjs/leb128": ["@webassemblyjs/leb128@1.11.6", "", { "dependencies": { "@xtuc/long": "4.2.2" } }, "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ=="], + + "@webassemblyjs/utf8": ["@webassemblyjs/utf8@1.11.6", "", {}, "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA=="], + + "@webassemblyjs/wasm-edit": ["@webassemblyjs/wasm-edit@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-section": "1.12.1", "@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-opt": "1.12.1", "@webassemblyjs/wasm-parser": "1.12.1", "@webassemblyjs/wast-printer": "1.12.1" } }, "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g=="], + + "@webassemblyjs/wasm-gen": ["@webassemblyjs/wasm-gen@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w=="], + + "@webassemblyjs/wasm-opt": ["@webassemblyjs/wasm-opt@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-parser": "1.12.1" } }, "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg=="], + + "@webassemblyjs/wasm-parser": ["@webassemblyjs/wasm-parser@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ=="], + + "@webassemblyjs/wast-printer": ["@webassemblyjs/wast-printer@1.12.1", "", { "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA=="], + + "@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="], + + "@xtuc/long": ["@xtuc/long@4.2.2", "", {}, "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="], + + "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], + + "acorn": ["acorn@8.18.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="], + + "acorn-import-assertions": ["acorn-import-assertions@1.9.0", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], + + "ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], + + "ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + + "array-includes": ["array-includes@3.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="], + + "array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="], + + "array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.6", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-shim-unscopables": "^1.1.0" } }, "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ=="], + + "array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="], + + "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="], + + "array.prototype.tosorted": ["array.prototype.tosorted@1.1.4", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA=="], + + "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], + + "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="], + + "astring": ["astring@1.8.6", "", { "bin": "bin/astring" }, "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg=="], + + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + + "axe-core": ["axe-core@4.13.0", "", {}, "sha512-UzGt8zg7Ny8djbYMhxl2zuEevVa7r2gJjYY5Lwr1xM7+XU2nd6CkIWFTVcCIbAP63vSz71NaVyyuSk9lHKcy0A=="], + + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base64id": ["base64id@2.0.0", "", {}, "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.11.21", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ=="], + + "better-auth": ["better-auth@1.7.3", "", { "dependencies": { "@better-auth/core": "1.7.3", "@better-auth/drizzle-adapter": "1.7.3", "@better-auth/kysely-adapter": "1.7.3", "@better-auth/memory-adapter": "1.7.3", "@better-auth/mongo-adapter": "1.7.3", "@better-auth/prisma-adapter": "1.7.3", "@better-auth/telemetry": "1.7.3", "@better-auth/utils": "0.4.2", "@better-fetch/fetch": "1.3.1", "@noble/ciphers": "^2.2.0", "@noble/hashes": "^2.2.0", "better-call": "1.4.0", "defu": "^6.1.4", "jose": "^6.2.3", "kysely": "^0.28.17 || ^0.29.0", "nanostores": "^1.3.0", "zod": "^4.5.4" }, "peerDependencies": { "@lynx-js/react": "*", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "@sveltejs/kit": "^2.0.0", "@tanstack/react-start": "^1.0.0", "@tanstack/solid-start": "^1.0.0", "better-sqlite3": "^12.0.0", "drizzle-kit": ">=0.31.4 || >=1.0.0-beta.1", "drizzle-orm": "^0.45.2 || >=1.0.0-rc.1 <2.0.0", "mongodb": "^6.0.0 || ^7.0.0", "mysql2": "^3.0.0", "next": "^14.0.0 || ^15.0.0 || ^16.0.0", "pg": "^8.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", "solid-js": "^1.0.0", "svelte": "^4.0.0 || ^5.0.0", "vitest": "^2.0.0 || ^3.0.0 || ^4.0.0", "vue": "^3.0.0" }, "optionalPeers": ["@lynx-js/react", "@prisma/client", "@sveltejs/kit", "@tanstack/react-start", "@tanstack/solid-start", "better-sqlite3", "drizzle-kit", "drizzle-orm", "mongodb", "mysql2", "next", "pg", "prisma", "react", "react-dom", "solid-js", "svelte", "vitest", "vue"] }, "sha512-8xGp68JQ+l36kniDEgP8bP99TLi1GdEv0NTEUBkyqnYnus/cgFUZseUfqUHKzr2BAsg2O6aD88I9f0U68shanQ=="], + + "better-call": ["better-call@1.4.0", "", { "dependencies": { "@better-auth/utils": "^0.5.0", "@better-fetch/fetch": "^1.3.1", "rou3": "^0.9.1", "set-cookie-parser": "^3.1.2" }, "peerDependencies": { "zod": "^4.0.0" }, "optionalPeers": ["zod"] }, "sha512-bBKOT4vv1kZLDgxVePdilk/Jwkn+dtRRsmi3DzHcDP+WnswyVl6dR59l2HEeP/0cB+bDoopASAesWDPIdd/zZA=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], + + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "braces": ["braces@3.0.2", "", { "dependencies": { "fill-range": "^7.0.1" } }, "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="], + + "browserslist": ["browserslist@4.23.0", "", { "dependencies": { "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, "bin": "cli.js" }, "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "bun-types": ["bun-types@1.4.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-bxV1FgK7yBIzjRe5zBozIM4Bem11ZJcCXSrjWRG3YWLt8yFDePu4cLjpebO8OvPeIE9trbyPF4fuj3Cia4Fj3w=="], + + "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001612", "", {}, "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g=="], + + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "character-entities": ["character-entities@1.2.4", "", {}, "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw=="], + + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@1.1.4", "", {}, "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA=="], + + "character-reference-invalid": ["character-reference-invalid@1.1.4", "", {}, "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg=="], + + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], + + "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], + + "class-variance-authority": ["class-variance-authority@0.7.0", "", { "dependencies": { "clsx": "2.0.0" } }, "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A=="], + + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], + + "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + + "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "cobe": ["cobe@0.6.3", "", { "dependencies": { "phenomenon": "^1.6.0" } }, "sha512-WHr7X4o1ym94GZ96h7b1pNemZJacbOzd02dZtnVwuC4oWBaLg96PBmp2rIS1SAhUDhhC/QyS9WEqkpZIs/ZBTg=="], + + "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + + "commander": ["commander@13.1.0", "", {}, "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "confbox": ["confbox@0.3.1", "", {}, "sha512-cKUSoKa8YxFZZSmraVi7onONx3amu77ngK3kGpsYHDH7drPwCRkQE1RYMPlLRrMtnciRj274XNRxcHxnKmDSnA=="], + + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + + "content-type": ["content-type@2.1.0", "", {}, "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + + "cookie-es": ["cookie-es@1.2.3", "", {}, "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw=="], + + "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": "bin/cssesc" }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="], + + "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], + + "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], + + "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], + + "date-fns": ["date-fns@3.6.0", "", {}, "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="], + + "debounce": ["debounce@2.2.0", "", {}, "sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw=="], + + "debug": ["debug@4.3.4", "", { "dependencies": { "ms": "2.1.2" } }, "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="], + + "decode-named-character-reference": ["decode-named-character-reference@1.0.2", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "defu": ["defu@6.1.7", "", {}, "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + + "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], + + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], + + "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], + + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], + + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + + "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + + "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + + "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], + + "drizzle-kit": ["drizzle-kit@0.31.10", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "tsx": "^4.21.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw=="], + + "drizzle-orm": ["drizzle-orm@0.44.7", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "prisma": "*", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "prisma", "sql.js", "sqlite3"] }, "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "electron-to-chromium": ["electron-to-chromium@1.4.787", "", {}, "sha512-d0EFmtLPjctczO3LogReyM2pbBiiZbnsKnGF+cdZhsYzHm/A0GV7W94kqzLD8SN4O3f3iHlgLUChqghgyznvCQ=="], + + "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "engine.io": ["engine.io@6.6.10", "", { "dependencies": { "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "@types/ws": "^8.5.12", "accepts": "~1.3.4", "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.4.1", "engine.io-parser": "~5.2.1", "ws": "~8.21.0" } }, "sha512-9/lX2bdlizlCXMHRMOIm03VBQHQYC7VvydcxtTAUJRxNW1QzM/2PMFSmr6h/lCiMHcyCP6abK+t9Q+j4vekk8Q=="], + + "engine.io-parser": ["engine.io-parser@5.2.3", "", {}, "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q=="], + + "enhanced-resolve": ["enhanced-resolve@5.16.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA=="], + + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "es-abstract": ["es-abstract@1.24.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg=="], + + "es-abstract-get": ["es-abstract-get@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "es-object-atoms": "^1.1.2", "is-callable": "^1.2.7", "object-inspect": "^1.13.4" } }, "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-iterator-helpers": ["es-iterator-helpers@1.4.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" } }, "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q=="], + + "es-module-lexer": ["es-module-lexer@1.5.3", "", {}, "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg=="], + + "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="], + + "es-to-primitive": ["es-to-primitive@1.3.4", "", { "dependencies": { "es-abstract-get": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "is-callable": "^1.2.7", "is-date-object": "^1.1.0", "is-symbol": "^1.1.1" } }, "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw=="], + + "esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], + + "escalade": ["escalade@3.1.2", "", {}, "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@9.39.5", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.6", "@eslint/js": "9.39.5", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw=="], + + "eslint-config-next": ["eslint-config-next@16.1.1", "", { "dependencies": { "@next/eslint-plugin-next": "16.1.1", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^7.0.0", "globals": "16.4.0", "typescript-eslint": "^8.46.0" }, "peerDependencies": { "eslint": ">=9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-55nTpVWm3qeuxoQKLOjQVciKZJUphKrNM0fCcQHAIOGl6VFXgaqeMfv0aKJhs7QtcnlAPhNVqsqRfRjeKBPIUA=="], + + "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], + + "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.6.1", "", { "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", "eslint-module-utils": "^2.7.4", "fast-glob": "^3.3.1", "get-tsconfig": "^4.5.0", "is-core-module": "^2.11.0", "is-glob": "^4.0.3" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg=="], + + "eslint-module-utils": ["eslint-module-utils@2.8.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q=="], + + "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="], + + "eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.10.2", "", { "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q=="], + + "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="], + + "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@7.1.1", "", { "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "hermes-parser": "^0.25.1", "zod": "^3.25.0 || ^4.0.0", "zod-validation-error": "^3.5.0 || ^4.0.0" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g=="], + + "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + + "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], + + "esquery": ["esquery@1.5.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], + + "estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="], + + "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], + + "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="], + + "estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="], + + "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + + "exsolve": ["exsolve@1.1.1", "", {}, "sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-glob": ["fast-glob@3.3.2", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fast-sha256": ["fast-sha256@1.3.0", "", {}, "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ=="], + + "fastq": ["fastq@1.17.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "fill-range": ["fill-range@7.0.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.3.1", "", {}, "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw=="], + + "for-each": ["for-each@0.3.3", "", { "dependencies": { "is-callable": "^1.1.3" } }, "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "framer-motion": ["framer-motion@12.43.0", "", { "dependencies": { "motion-dom": "^12.43.0", "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-1eaL3RvR/kAlbG7UYcpMptEyzPoENO0c6w7ZnB3/hh2vSAz/6uGAFn6fdoqTBguNstf3MsFhJHsD/0DHiclG+g=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "function.prototype.name": ["function.prototype.name@1.2.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2", "hasown": "^2.0.4", "is-callable": "^1.2.7", "is-document.all": "^1.0.0" } }, "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew=="], + + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + + "geist": ["geist@1.3.0", "", { "peerDependencies": { "next": ">=13.2.0 <15.0.0-0" } }, "sha512-IoGBfcqVEYB4bEwsfHd35jF4+X9LHRPYZymHL4YOltHSs9LJa24DYs1Z7rEMQ/lsEvaAIc61Y9aUxgcJaQ8lrg=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], + + "get-tsconfig": ["get-tsconfig@4.7.3", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg=="], + + "glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], + + "globals": ["globals@16.4.0", "", {}, "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="], + + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], + + "has-bigints": ["has-bigints@1.0.2", "", {}, "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], + + "hast-util-parse-selector": ["hast-util-parse-selector@2.2.5", "", {}, "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ=="], + + "hast-util-to-estree": ["hast-util-to-estree@3.1.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", "style-to-object": "^0.4.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw=="], + + "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", "style-to-object": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ=="], + + "hast-util-to-string": ["hast-util-to-string@1.0.4", "", {}, "sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w=="], + + "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + + "hastscript": ["hastscript@6.0.0", "", { "dependencies": { "@types/hast": "^2.0.0", "comma-separated-tokens": "^1.0.0", "hast-util-parse-selector": "^2.0.0", "property-information": "^5.0.0", "space-separated-tokens": "^1.0.0" } }, "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w=="], + + "hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="], + + "hermes-parser": ["hermes-parser@0.25.1", "", { "dependencies": { "hermes-estree": "0.25.1" } }, "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA=="], + + "highlight.js": ["highlight.js@11.11.2", "", {}, "sha512-oaXMACAU0kzOMXBjWpNcX+vlwSBCIAiZ9BHa7gA15NOTtT2L/l8OSZDuqS2XppOhZBPJ7hm4o8ep2kyuip2uEQ=="], + + "html-to-text": ["html-to-text@9.0.5", "", { "dependencies": { "@selderee/plugin-htmlparser2": "^0.11.0", "deepmerge": "^4.3.1", "dom-serializer": "^2.0.0", "htmlparser2": "^8.0.2", "selderee": "^0.11.0" } }, "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg=="], + + "html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="], + + "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], + + "icu-minify": ["icu-minify@4.14.2", "", { "dependencies": { "@formatjs/icu-messageformat-parser": "^3.4.0" } }, "sha512-2eJ9ooR8xXWbe0IivG58TFL96AUp5ts8FJ4qSMzn8YRJXpLmtPNWcUkIZ8t3iz0+eaVzG+mN+rdNIigHDvYa2Q=="], + + "ignore": ["ignore@5.3.1", "", {}, "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw=="], + + "import-fresh": ["import-fresh@3.3.0", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inline-style-parser": ["inline-style-parser@0.2.3", "", {}, "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g=="], + + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + + "intl-messageformat": ["intl-messageformat@11.2.14", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.7", "@formatjs/icu-messageformat-parser": "3.5.17" } }, "sha512-9f2VD1HFuxUvMw0RxsaP8WmMns6JRTnsNB/zghTFrp11ZktiXWwVDeZBPQchBKEmo+Gx/ZhxI7Qht7YglFD4PA=="], + + "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], + + "is-alphabetical": ["is-alphabetical@1.0.4", "", {}, "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg=="], + + "is-alphanumerical": ["is-alphanumerical@1.0.4", "", { "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" } }, "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A=="], + + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], + + "is-async-function": ["is-async-function@2.0.0", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA=="], + + "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + + "is-core-module": ["is-core-module@2.13.1", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw=="], + + "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], + + "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + + "is-decimal": ["is-decimal@1.0.4", "", {}, "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw=="], + + "is-document.all": ["is-document.all@1.0.0", "", { "dependencies": { "call-bound": "^1.0.4" } }, "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-generator-function": ["is-generator-function@1.0.10", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-hexadecimal": ["is-hexadecimal@1.0.4", "", {}, "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="], + + "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], + + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], + + "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + + "is-reference": ["is-reference@3.0.2", "", { "dependencies": { "@types/estree": "*" } }, "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg=="], + + "is-regex": ["is-regex@1.1.4", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg=="], + + "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], + + "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], + + "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], + + "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + + "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + + "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], + + "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], + + "is-weakset": ["is-weakset@2.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" } }, "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ=="], + + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="], + + "jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="], + + "jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], + + "jiti": ["jiti@1.21.0", "", { "bin": "bin/jiti.js" }, "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q=="], + + "jose": ["jose@6.2.12", "", {}, "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.3.2", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + + "kysely": ["kysely@0.29.5", "", {}, "sha512-ooa+eSbBNPTo3MycPEuW5jdrxQdQwdtB3LC3h43FiXQbIry5tR0C5lDG7eealK0E4D7XjrnOP5DIUg/LyjRMYQ=="], + + "language-subtag-registry": ["language-subtag-registry@0.3.22", "", {}, "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="], + + "language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="], + + "leac": ["leac@0.6.0", "", {}, "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "loader-runner": ["loader-runner@4.3.0", "", {}, "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash.castarray": ["lodash.castarray@4.4.0", "", {}, "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q=="], + + "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "log-symbols": ["log-symbols@7.0.1", "", { "dependencies": { "is-unicode-supported": "^2.0.0", "yoctocolors": "^2.1.1" } }, "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg=="], + + "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], + + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": "cli.js" }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + + "lowlight": ["lowlight@3.3.0", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.0.0", "highlight.js": "~11.11.0" } }, "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ=="], + + "lru-cache": ["lru-cache@11.5.2", "", {}, "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g=="], + + "lucide-react": ["lucide-react@0.562.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw=="], + + "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], + + "markdown-table": ["markdown-table@3.0.3", "", {}, "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw=="], + + "marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA=="], + + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA=="], + + "mdast-util-gfm": ["mdast-util-gfm@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw=="], + + "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg=="], + + "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ=="], + + "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], + + "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], + + "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], + + "mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="], + + "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw=="], + + "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.1.2", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-remove-position": "^5.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA=="], + + "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], + + "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], + + "mdast-util-to-hast": ["mdast-util-to-hast@13.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA=="], + + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ=="], + + "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], + + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromark": ["micromark@4.0.0", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ=="], + + "micromark-core-commonmark": ["micromark-core-commonmark@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA=="], + + "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], + + "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg=="], + + "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.0.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg=="], + + "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.0.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw=="], + + "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.0.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw=="], + + "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], + + "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw=="], + + "micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ=="], + + "micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.0", "", { "dependencies": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w=="], + + "micromark-extension-mdx-md": ["micromark-extension-mdx-md@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ=="], + + "micromark-extension-mdxjs": ["micromark-extension-mdxjs@3.0.0", "", { "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", "micromark-extension-mdx-expression": "^3.0.0", "micromark-extension-mdx-jsx": "^3.0.0", "micromark-extension-mdx-md": "^2.0.0", "micromark-extension-mdxjs-esm": "^3.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ=="], + + "micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="], + + "micromark-factory-destination": ["micromark-factory-destination@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA=="], + + "micromark-factory-label": ["micromark-factory-label@2.0.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw=="], + + "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg=="], + + "micromark-factory-space": ["micromark-factory-space@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg=="], + + "micromark-factory-title": ["micromark-factory-title@2.0.0", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A=="], + + "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.0", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA=="], + + "micromark-util-character": ["micromark-util-character@2.1.0", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ=="], + + "micromark-util-chunked": ["micromark-util-chunked@2.0.0", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg=="], + + "micromark-util-classify-character": ["micromark-util-classify-character@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw=="], + + "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.0", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ=="], + + "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ=="], + + "micromark-util-decode-string": ["micromark-util-decode-string@2.0.0", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.0", "", {}, "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA=="], + + "micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.2", "", { "dependencies": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA=="], + + "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.0", "", {}, "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw=="], + + "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.0", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w=="], + + "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA=="], + + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw=="], + + "micromark-util-subtokenize": ["micromark-util-subtokenize@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.0", "", {}, "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw=="], + + "micromark-util-types": ["micromark-util-types@2.0.0", "", {}, "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w=="], + + "micromatch": ["micromatch@4.0.5", "", { "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA=="], + + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + + "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], + + "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], + + "motion-dom": ["motion-dom@12.43.0", "", { "dependencies": { "motion-utils": "^12.39.0" } }, "sha512-azKON4d9S65PEoFUiQTMTgPheEmzf2QngdRc50AKfJp9Q9mmcBVw22c8eMq9k8kxOFHdL7+WZY7N/5F/lwiDag=="], + + "motion-utils": ["motion-utils@12.39.0", "", {}, "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ=="], + + "ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], + + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], + + "nanoid": ["nanoid@5.1.16", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ=="], + + "nanostores": ["nanostores@1.5.3", "", {}, "sha512-rQLB6eV4f2AW/n3L0JmwCROpaisYy9EDEADvEFSd1C/qG8hB6O5TPlh9A791JRbJr4CnMQBzptDcvD9OR1+6WA=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "negotiator": ["negotiator@1.1.0", "", { "dependencies": { "content-type": "^2.1.0" } }, "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg=="], + + "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], + + "next": ["next@16.1.1", "", { "dependencies": { "@next/env": "16.1.1", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.1", "@next/swc-darwin-x64": "16.1.1", "@next/swc-linux-arm64-gnu": "16.1.1", "@next/swc-linux-arm64-musl": "16.1.1", "@next/swc-linux-x64-gnu": "16.1.1", "@next/swc-linux-x64-musl": "16.1.1", "@next/swc-win32-arm64-msvc": "16.1.1", "@next/swc-win32-x64-msvc": "16.1.1", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-QI+T7xrxt1pF6SQ/JYFz95ro/mg/1Znk5vBebsWwbpejj1T0A23hO7GYEaVac9QUOT2BIMiuzm0L99ooq7k0/w=="], + + "next-intl": ["next-intl@4.14.2", "", { "dependencies": { "@eloqnt/config": "^0.1.0", "@eloqnt/format-json": "^0.1.0", "@eloqnt/format-po": "^0.1.0", "@formatjs/intl-localematcher": "^0.8.1", "@parcel/watcher": "^2.4.1", "@swc/core": "~1.16.0", "icu-minify": "^4.14.2", "negotiator": "^1.0.0", "next-intl-swc-plugin-extractor": "4.14.2", "use-intl": "^4.14.2" }, "peerDependencies": { "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" } }, "sha512-rIq8me1uOa2qXnttJ6dUGYnHHL63Rh1FAIIDTJP5av5KSBmUzNBS17QAi07QDrUMY6KxFNeoCTRzSZRPUc97lg=="], + + "next-intl-swc-plugin-extractor": ["next-intl-swc-plugin-extractor@4.14.2", "", {}, "sha512-R+i9Xw6XKyn1QVx+I5IDZQNGQBwT79ugGwzbuJudgejob/IYnXXrRKMlLhmMxLdKH8jUWh92nqwNnp+5rtSVJA=="], + + "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], + + "next-view-transitions": ["next-view-transitions@0.3.5", "", { "peerDependencies": { "next": ">=14.0.0", "react": ">=18.2.0 || ^19.0.0", "react-dom": ">=18.2.0 || ^19.0.0" } }, "sha512-yP8OPNydLmKpmE94hLurLGEzPsUy1uyl9iSv8oxaC2JwhSXTD86SVwk1NMMQT7Ado4kMENDJ7fNBIXHy3GU/Lg=="], + + "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], + + "node-mock-http": ["node-mock-http@1.0.5", "", {}, "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw=="], + + "node-releases": ["node-releases@2.0.14", "", {}, "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "nypm": ["nypm@0.6.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "pathe": "^2.0.3", "pkg-types": "^2.0.0", "tinyexec": "^0.3.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + + "object.assign": ["object.assign@4.1.5", "", { "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ=="], + + "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="], + + "object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="], + + "object.groupby": ["object.groupby@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ=="], + + "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], + + "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], + + "optionator": ["optionator@0.9.3", "", { "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0" } }, "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg=="], + + "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], + + "own-keys": ["own-keys@1.0.2", "", { "dependencies": { "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "parse-entities": ["parse-entities@2.0.0", "", { "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", "character-reference-invalid": "^1.0.0", "is-alphanumerical": "^1.0.0", "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" } }, "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ=="], + + "parseley": ["parseley@0.12.1", "", { "dependencies": { "leac": "^0.6.0", "peberminta": "^0.9.0" } }, "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], + + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], + + "periscopic": ["periscopic@3.1.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^3.0.0", "is-reference": "^3.0.0" } }, "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw=="], + + "pg": ["pg@8.23.0", "", { "dependencies": { "pg-connection-string": "^2.14.0", "pg-pool": "^3.14.0", "pg-protocol": "^1.16.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.4.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-Ip2EQCngowJLGOfCwkFhPXU7/ljlhn6Rxlmy4XYfL2Y+vyRM59+8uR2xqRWKdYmbXmxCFOAmKxBuSUCdF34qLg=="], + + "pg-cloudflare": ["pg-cloudflare@1.4.0", "", {}, "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A=="], + + "pg-connection-string": ["pg-connection-string@2.14.0", "", {}, "sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg=="], + + "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], + + "pg-pool": ["pg-pool@3.14.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw=="], + + "pg-protocol": ["pg-protocol@1.16.0", "", {}, "sha512-sILXutLVjCLjcDuOmvhX5e2Z4cS5qG/6Bu3VkpFwdf/633ElGLpEh9bgmuI5I4sqKqkifQiGyiCcx1HdtrK7tg=="], + + "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], + + "pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="], + + "phenomenon": ["phenomenon@1.6.0", "", {}, "sha512-7h9/fjPD3qNlgggzm88cY58l9sudZ6Ey+UmZsizfhtawO6E3srZQXywaNm2lBwT72TbpHYRPy7ytIHeBUD/G0A=="], + + "picocolors": ["picocolors@1.0.1", "", {}, "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="], + + "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], + + "pirates": ["pirates@4.0.6", "", {}, "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg=="], + + "pkg-types": ["pkg-types@2.3.3", "", { "dependencies": { "confbox": "^0.3.1", "exsolve": "^1.1.1", "pathe": "^2.0.3" } }, "sha512-j/lCFdcppV0JxWpCEITdbDltBxPP6cHT+yNJ6Go2OgoSA9518X847X9z0p6LtA4Nc16+eQzCZjRrWanTGvHJ5w=="], + + "playwright": ["playwright@1.63.0", "", { "dependencies": { "playwright-core": "1.63.0" }, "bin": { "playwright": "cli.js" } }, "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg=="], + + "playwright-core": ["playwright-core@1.63.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg=="], + + "png-to-ico": ["png-to-ico@3.0.2", "", { "dependencies": { "@types/node": "^25.5.0", "minimist": "^1.2.8", "pngjs": "^7.0.0" }, "bin": { "png-to-ico": "bin/cli.js" } }, "sha512-36vvp3/YF7LPYkUEOj08/WgB1wI63qW391YfOhOWckgOtGkarr9+EhPBimcCmRP7fJaG4EaXQhTTaQ8qqdj8aA=="], + + "pngjs": ["pngjs@7.0.0", "", {}, "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow=="], + + "po-parser": ["po-parser@2.2.0", "", {}, "sha512-NdTrKgh0oO7+y+RFX8KKhOB438x/j94UGXEFzl/7pHH0JjWSn42iJ9tgmPksIO6n1JKDHmNDcejPJfKspljB9g=="], + + "possible-typed-array-names": ["possible-typed-array-names@1.0.0", "", {}, "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q=="], + + "postal-mime": ["postal-mime@2.7.5", "", {}, "sha512-GNEXKvWFQnbgO5NlrGzVa0FmWzBZ24PersAWErttSg1Hjpf0ATxTwS5DOMGaOpTG6bUh5cTr7xi0jAD942wCJA=="], + + "postcss": ["postcss@8.4.38", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.2.0" } }, "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A=="], + + "postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], + + "postcss-js": ["postcss-js@4.0.1", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw=="], + + "postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="], + + "postcss-nested": ["postcss-nested@6.0.1", "", { "dependencies": { "postcss-selector-parser": "^6.0.11" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ=="], + + "postcss-selector-parser": ["postcss-selector-parser@6.0.16", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "postgres": ["postgres@3.4.9", "", {}, "sha512-GD3qdB0x1z9xgFI6cdRD6xu2Sp2WCOEoe3mtnyB5Ee0XrrL5Pe+e4CCnJrRMnL1zYtRDZmQQVbvOttLnKDLnaw=="], + + "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], + + "postgres-bytea": ["postgres-bytea@1.0.1", "", {}, "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ=="], + + "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], + + "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "prettier": ["prettier@3.9.6", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g=="], + + "prismjs": ["prismjs@1.29.0", "", {}, "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q=="], + + "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + + "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + + "property-information": ["property-information@6.5.0", "", {}, "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], + + "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], + + "react": ["react@19.2.8", "", {}, "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw=="], + + "react-dom": ["react-dom@19.2.8", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.8" } }, "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ=="], + + "react-email": ["react-email@4.3.2", "", { "dependencies": { "@babel/parser": "^7.27.0", "@babel/traverse": "^7.27.0", "chokidar": "^4.0.3", "commander": "^13.0.0", "debounce": "^2.0.0", "esbuild": "^0.25.0", "glob": "^11.0.0", "jiti": "2.4.2", "log-symbols": "^7.0.0", "mime-types": "^3.0.0", "normalize-path": "^3.0.0", "nypm": "0.6.0", "ora": "^8.0.0", "prompts": "2.4.2", "socket.io": "^4.8.1", "tsconfig-paths": "4.2.0" }, "bin": { "email": "dist/index.js" } }, "sha512-WaZcnv9OAIRULY236zDRdk+8r511ooJGH5UOb7FnVsV33hGPI+l5aIZ6drVjXi4QrlLTmLm8PsYvmXRSv31MPA=="], + + "react-hook-form": ["react-hook-form@7.51.5", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18" } }, "sha512-J2ILT5gWx1XUIJRETiA7M19iXHlG74+6O3KApzvqB/w8S5NQR7AbU8HVZrMALdmDgWpRPYiZJl0zx8Z4L2mP6Q=="], + + "react-icons": ["react-icons@5.2.1", "", { "peerDependencies": { "react": "*" } }, "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw=="], + + "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + + "react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], + + "react-promise-suspense": ["react-promise-suspense@0.3.4", "", { "dependencies": { "fast-deep-equal": "^2.0.1" } }, "sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ=="], + + "react-wrap-balancer": ["react-wrap-balancer@1.1.1", "", { "peerDependencies": { "react": ">=16.8.0 || ^17.0.0 || ^18" } }, "sha512-AB+l7FPRWl6uZ28VcJ8skkwLn2+UC62bjiw8tQUrZPlEWDVnR9MG0lghyn7EyxuJSsFEpht4G+yh2WikEqQ/5Q=="], + + "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "reading-time": ["reading-time@1.5.0", "", {}, "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg=="], + + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], + + "refractor": ["refractor@3.6.0", "", { "dependencies": { "hastscript": "^6.0.0", "parse-entities": "^2.0.0", "prismjs": "~1.27.0" } }, "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA=="], + + "regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], + + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + + "rehype-highlight": ["rehype-highlight@7.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-text": "^4.0.0", "lowlight": "^3.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA=="], + + "remark-gfm": ["remark-gfm@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA=="], + + "remark-mdx": ["remark-mdx@3.0.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA=="], + + "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], + + "remark-rehype": ["remark-rehype@11.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g=="], + + "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], + + "resend": ["resend@6.26.0", "", { "dependencies": { "postal-mime": "2.7.5", "standardwebhooks": "1.0.0" }, "peerDependencies": { "@react-email/render": "*" }, "optionalPeers": ["@react-email/render"] }, "sha512-vkrULozV5nGF8o7tyun/t0+qFgtPpn+cyRhVqeorhOsPUNDiSc/9p/pn8AprdHqJpYaTvftpnQgWurW++FkCdw=="], + + "resolve": ["resolve@1.22.8", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw=="], + + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + + "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], + + "reusify": ["reusify@1.0.4", "", {}, "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="], + + "rou3": ["rou3@0.9.2", "", {}, "sha512-3SOzvaAg8rkHrXtRjpCvCvbyO5to9oOO27Z/XqHEYXfMRVSw/qMIVdmaOk9W2lcRLtR6dlqTjo9hDeJk70QBYQ=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], + + "safe-regex-test": ["safe-regex-test@1.0.3", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-regex": "^1.1.4" } }, "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw=="], + + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + + "schema-utils": ["schema-utils@3.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg=="], + + "selderee": ["selderee@0.11.0", "", { "dependencies": { "parseley": "^0.12.0" } }, "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA=="], + + "semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], + + "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], + + "set-cookie-parser": ["set-cookie-parser@3.1.2", "", {}, "sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw=="], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + + "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], + + "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "side-channel": ["side-channel@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="], + + "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + + "socket.io": ["socket.io@4.8.3", "", { "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.4.1", "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } }, "sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A=="], + + "socket.io-adapter": ["socket.io-adapter@2.5.8", "", { "dependencies": { "debug": "~4.4.1", "ws": "~8.21.0" } }, "sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw=="], + + "socket.io-parser": ["socket.io-parser@4.2.7", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1" } }, "sha512-IH/iSeO9T6gz1KkFleGDWkG9N3dl4jXVYUtMhIqH10Md0ttMer8nUNWiP1DKuNrybD2xBrixLJdCC9J6ECoYkg=="], + + "sonner": ["sonner@2.0.8", "", { "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-UM/ByIoFra8yzV75n1o0Puu0bw5U/9UNnDacrJNspekBewIfsQ3D6ez1nvlWpt7aTsO6rujQtifBpycwIivqlg=="], + + "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + + "source-map-js": ["source-map-js@1.2.0", "", {}, "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + + "standardwebhooks": ["standardwebhooks@1.0.0", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "fast-sha256": "^1.3.0" } }, "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg=="], + + "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], + + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], + + "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string.prototype.includes": ["string.prototype.includes@2.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" } }, "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg=="], + + "string.prototype.matchall": ["string.prototype.matchall@4.1.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.2", "get-intrinsic": "^1.3.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.4", "set-function-name": "^2.0.2", "side-channel": "^1.1.1" } }, "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ=="], + + "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="], + + "string.prototype.trim": ["string.prototype.trim@1.2.11", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-object-atoms": "^1.1.2", "has-property-descriptors": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w=="], + + "string.prototype.trimend": ["string.prototype.trimend@1.0.10", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.2" } }, "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw=="], + + "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], + + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + + "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "style-to-object": ["style-to-object@1.0.6", "", { "dependencies": { "inline-style-parser": "0.2.3" } }, "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA=="], + + "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "@babel/core": "*", "babel-plugin-macros": "*", "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" }, "optionalPeers": ["@babel/core", "babel-plugin-macros"] }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], + + "sucrase": ["sucrase@3.35.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "tailwind-merge": ["tailwind-merge@2.3.0", "", { "dependencies": { "@babel/runtime": "^7.24.1" } }, "sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA=="], + + "tailwindcss": ["tailwindcss@3.4.3", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", "postcss": "^8.4.23", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.1", "postcss-nested": "^6.0.1", "postcss-selector-parser": "^6.0.11", "resolve": "^1.22.2", "sucrase": "^3.32.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A=="], + + "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], + + "terser": ["terser@5.31.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": "bin/terser" }, "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg=="], + + "terser-webpack-plugin": ["terser-webpack-plugin@5.3.10", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", "terser": "^5.26.0" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w=="], + + "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], + + "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], + + "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], + + "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], + + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], + + "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tsx": ["tsx@4.23.13", "", { "dependencies": { "esbuild": "~0.28.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], + + "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], + + "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], + + "typed-array-length": ["typed-array-length@1.0.8", "", { "dependencies": { "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "possible-typed-array-names": "^1.1.0", "reflect.getprototypeof": "^1.0.10" } }, "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g=="], + + "typescript": ["typescript@5.4.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ=="], + + "typescript-eslint": ["typescript-eslint@8.70.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.70.0", "@typescript-eslint/parser": "8.70.0", "@typescript-eslint/typescript-estree": "8.70.0", "@typescript-eslint/utils": "8.70.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-P/W5cz70/cQAuKfY3xwQMWWTV7BvJ0mAQmi+9mBcsVPaBUpd6Ohpa+fECv9rBFrQcig86jAiNBFNWUqnTjr4pw=="], + + "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], + + "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], + + "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], + + "undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], + + "unified": ["unified@11.0.4", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ=="], + + "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], + + "unist-util-is": ["unist-util-is@4.1.0", "", {}, "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="], + + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + + "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], + + "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], + + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + + "unist-util-visit": ["unist-util-visit@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" } }, "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@3.1.1", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" } }, "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg=="], + + "update-browserslist-db": ["update-browserslist-db@1.0.16", "", { "dependencies": { "escalade": "^3.1.2", "picocolors": "^1.0.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "use-intl": ["use-intl@4.14.2", "", { "dependencies": { "@formatjs/fast-memoize": "^3.1.0", "@schummar/icu-type-parser": "1.21.5", "icu-minify": "^4.14.2", "intl-messageformat": "^11.1.0" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" } }, "sha512-XffvbD4q4uZjRbuO8CgK6Ei8hvYn7aegoSad2YPho1ZRjYEs+k4erhYq0vfm5ttF4lnja3riXCeJrtUdNdQG3g=="], + + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + + "vfile": ["vfile@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw=="], + + "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], + + "watchpack": ["watchpack@2.4.1", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg=="], + + "webpack": ["webpack@5.91.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": "bin/webpack.js" }, "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw=="], + + "webpack-sources": ["webpack-sources@3.2.3", "", {}, "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], + + "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], + + "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], + + "which-typed-array": ["which-typed-array@1.1.22", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw=="], + + "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], + + "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], + + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "yaml": ["yaml@2.4.1", "", { "bin": "bin.mjs" }, "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "yoctocolors": ["yoctocolors@2.2.0", "", {}, "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg=="], + + "zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + + "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="], + + "zustand": ["zustand@4.5.7", "", { "dependencies": { "use-sync-external-store": "^1.2.2" }, "peerDependencies": { "@types/react": ">=16.8", "immer": ">=9.0.6", "react": ">=16.8" }, "optionalPeers": ["@types/react", "immer", "react"] }, "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw=="], + + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + + "@babel/code-frame/picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "@babel/core/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@babel/core/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@babel/helper-compilation-targets/browserslist": ["browserslist@4.28.9", "", { "dependencies": { "baseline-browser-mapping": "^2.11.20", "caniuse-lite": "^1.0.30001810", "electron-to-chromium": "^1.5.420", "node-releases": "^2.0.54", "update-browserslist-db": "^1.3.2" }, "bin": { "browserslist": "cli.js" } }, "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg=="], + + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@better-auth/core/@better-fetch/fetch": ["@better-fetch/fetch@1.3.1", "", {}, "sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g=="], + + "@better-auth/core/zod": ["zod@4.5.4", "", {}, "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA=="], + + "@better-auth/telemetry/@better-fetch/fetch": ["@better-fetch/fetch@1.3.1", "", {}, "sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g=="], + + "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@eslint/config-array/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@eslint/eslintrc/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + + "@jridgewell/remapping/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@mdx-js/mdx/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "@mdx-js/mdx/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], + + "@parcel/watcher/picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], + + "@react-email/code-block/prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + + "@tailwindcss/typography/postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="], + + "@types/acorn/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "@types/eslint/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "@types/eslint-scope/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "@types/estree-jsx/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "@types/hast/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "@types/mdast/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.9", "", {}, "sha512-brTTsvFRt5C1gGHtPst/281UjPD5t9fBqbgoMPlVWy11ZLTPfu7HxK4ZYqO9H7o/yC9rSTCI85EaQ4OoY12qYw=="], + + "@typescript-eslint/parser/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@typescript-eslint/project-service/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@typescript-eslint/type-utils/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@typescript-eslint/typescript-estree/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + + "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "accepts/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], + + "array.prototype.findlast/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "array.prototype.findlast/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], + + "array.prototype.findlast/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], + + "array.prototype.findlast/es-shim-unscopables": ["es-shim-unscopables@1.0.2", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw=="], + + "array.prototype.flat/es-shim-unscopables": ["es-shim-unscopables@1.0.2", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw=="], + + "array.prototype.flatmap/es-shim-unscopables": ["es-shim-unscopables@1.0.2", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw=="], + + "better-auth/@better-fetch/fetch": ["@better-fetch/fetch@1.3.1", "", {}, "sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g=="], + + "better-auth/zod": ["zod@4.5.4", "", {}, "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA=="], + + "better-call/@better-auth/utils": ["@better-auth/utils@0.5.0", "", { "dependencies": { "@noble/hashes": "^2.0.1" } }, "sha512-BL8W4EfIZFwlu0r54m3v1ztjDhu6dDe/amLTm0xybmbZaNgYUqhD3SjpAsnq0q8YD6/ki4iwIgxJNLP/N3TxiA=="], + + "better-call/@better-fetch/fetch": ["@better-fetch/fetch@1.3.1", "", {}, "sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g=="], + + "bun-types/@types/node": ["@types/node@25.9.5", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg=="], + + "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "class-variance-authority/clsx": ["clsx@2.0.0", "", {}, "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q=="], + + "decode-named-character-reference/character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + + "define-data-property/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "define-data-property/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], + + "drizzle-kit/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "engine.io/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "es-abstract/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "es-abstract/is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "es-abstract/object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + + "es-abstract/safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "es-set-tostringtag/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "es-shim-unscopables/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "eslint-plugin-import/eslint-module-utils": ["eslint-module-utils@2.14.0", "", { "dependencies": { "debug": "^3.2.7" }, "peerDependencies": { "eslint": "*" }, "optionalPeers": ["eslint"] }, "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig=="], + + "eslint-plugin-import/is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], + + "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], + + "eslint-plugin-react/resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], + + "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "eslint-plugin-react-hooks/zod": ["zod@4.5.4", "", {}, "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA=="], + + "estree-util-attach-comments/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "estree-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "estree-walker/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "function.prototype.name/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "get-intrinsic/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "glob/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + + "has-property-descriptors/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "has-tostringtag/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "hast-util-to-estree/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "hast-util-to-estree/style-to-object": ["style-to-object@0.4.4", "", { "dependencies": { "inline-style-parser": "0.1.1" } }, "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg=="], + + "hast-util-to-jsx-runtime/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "hast-util-to-jsx-runtime/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "hast-util-to-text/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "hastscript/@types/hast": ["@types/hast@2.3.10", "", { "dependencies": { "@types/unist": "^2" } }, "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw=="], + + "hastscript/comma-separated-tokens": ["comma-separated-tokens@1.0.8", "", {}, "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw=="], + + "hastscript/property-information": ["property-information@5.6.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA=="], + + "hastscript/space-separated-tokens": ["space-separated-tokens@1.1.5", "", {}, "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA=="], + + "internal-slot/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "is-reference/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "is-regex/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "is-symbol/safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "is-weakset/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "is-weakset/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jsx-ast-utils/array-includes": ["array-includes@3.1.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" } }, "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ=="], + + "jsx-ast-utils/array.prototype.flat": ["array.prototype.flat@1.3.2", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA=="], + + "jsx-ast-utils/object.values": ["object.values@1.2.0", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ=="], + + "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + + "mdast-util-find-and-replace/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "mdast-util-find-and-replace/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "mdast-util-from-markdown/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "mdast-util-mdx-jsx/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "mdast-util-mdx-jsx/parse-entities": ["parse-entities@4.0.1", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w=="], + + "mdast-util-phrasing/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "mdast-util-to-hast/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "mdast-util-to-markdown/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "mdast-util-to-markdown/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "micromark-extension-mdx-expression/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "micromark-extension-mdx-jsx/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "micromark-extension-mdxjs/acorn": ["acorn@8.11.3", "", { "bin": "bin/acorn" }, "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="], + + "micromark-extension-mdxjs-esm/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "micromark-factory-mdx-expression/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "micromark-util-events-to-acorn/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "micromark-util-events-to-acorn/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], + + "object.assign/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "object.assign/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "object.fromentries/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "object.fromentries/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], + + "object.fromentries/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], + + "object.groupby/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "object.groupby/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], + + "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "ora/log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], + + "periscopic/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "png-to-ico/@types/node": ["@types/node@25.9.5", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg=="], + + "postcss/nanoid": ["nanoid@3.3.7", "", { "bin": "bin/nanoid.cjs" }, "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="], + + "postcss-load-config/lilconfig": ["lilconfig@3.1.1", "", {}, "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ=="], + + "react-email/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "react-email/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "react-email/jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + + "react-markdown/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "react-promise-suspense/fast-deep-equal": ["fast-deep-equal@2.0.1", "", {}, "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w=="], + + "refractor/prismjs": ["prismjs@1.27.0", "", {}, "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA=="], + + "rehype-highlight/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "safe-regex-test/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "schema-utils/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "set-function-length/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "set-function-length/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], + + "socket.io/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "socket.io-adapter/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "socket.io-parser/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "string.prototype.trim/safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "string.prototype.trimstart/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "string.prototype.trimstart/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], + + "stringify-entities/character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + + "sucrase/glob": ["glob@10.3.10", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": "dist/esm/bin.mjs" }, "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g=="], + + "terser/acorn": ["acorn@8.11.3", "", { "bin": "bin/acorn" }, "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="], + + "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "tinyglobby/picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], + + "typed-array-length/for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + + "typed-array-length/possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "unified/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "unist-util-find-after/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "unist-util-find-after/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "unist-util-position/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "unist-util-position-from-estree/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "unist-util-remove-position/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "unist-util-remove-position/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "unist-util-stringify-position/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "vfile/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "vfile-message/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "webpack/@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="], + + "webpack/acorn": ["acorn@8.11.3", "", { "bin": "bin/acorn" }, "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="], + + "webpack/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], + + "webpack/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "which-builtin-type/is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "which-typed-array/for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + + "wrap-ansi/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@babel/core/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@babel/generator/@jridgewell/gen-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], + + "@babel/helper-compilation-targets/browserslist/caniuse-lite": ["caniuse-lite@1.0.30001810", "", {}, "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg=="], + + "@babel/helper-compilation-targets/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.423", "", {}, "sha512-rRZfTSY8ptHYMQxa+uIycJMFKmY1T0GIApNMXJYGehguTZa56TEEl19pKPCoBqk5Gpf7QizZn/jt7xur+DYxag=="], + + "@babel/helper-compilation-targets/browserslist/node-releases": ["node-releases@2.0.54", "", {}, "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ=="], + + "@babel/helper-compilation-targets/browserslist/update-browserslist-db": ["update-browserslist-db@1.3.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.18.20", "", { "os": "android", "cpu": "x64" }, "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.18.20", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.18.20", "", { "os": "darwin", "cpu": "x64" }, "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.18.20", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.18.20", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.18.20", "", { "os": "linux", "cpu": "arm" }, "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.18.20", "", { "os": "linux", "cpu": "arm64" }, "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.18.20", "", { "os": "linux", "cpu": "ia32" }, "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.18.20", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.18.20", "", { "os": "linux", "cpu": "s390x" }, "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.18.20", "", { "os": "linux", "cpu": "x64" }, "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.18.20", "", { "os": "none", "cpu": "x64" }, "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.18.20", "", { "os": "openbsd", "cpu": "x64" }, "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.18.20", "", { "os": "sunos", "cpu": "x64" }, "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.18.20", "", { "os": "win32", "cpu": "arm64" }, "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.18.20", "", { "os": "win32", "cpu": "ia32" }, "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], + + "@eslint/config-array/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@eslint/eslintrc/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@jridgewell/remapping/@jridgewell/gen-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], + + "@mdx-js/mdx/unist-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "@mdx-js/mdx/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "@mdx-js/mdx/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "@next/eslint-plugin-next/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "@typescript-eslint/parser/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@typescript-eslint/project-service/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@typescript-eslint/type-utils/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@typescript-eslint/typescript-estree/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], + + "accepts/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "array.prototype.findlast/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "array.prototype.findlast/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "array.prototype.findlast/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], + + "array.prototype.findlast/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], + + "array.prototype.findlast/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], + + "array.prototype.findlast/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], + + "array.prototype.findlast/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], + + "array.prototype.findlast/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "array.prototype.findlast/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], + + "array.prototype.findlast/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], + + "array.prototype.findlast/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], + + "array.prototype.findlast/es-abstract/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "array.prototype.findlast/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], + + "array.prototype.findlast/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], + + "array.prototype.findlast/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], + + "array.prototype.findlast/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "array.prototype.findlast/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "array.prototype.findlast/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], + + "array.prototype.findlast/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], + + "array.prototype.findlast/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], + + "array.prototype.findlast/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], + + "array.prototype.findlast/es-abstract/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], + + "array.prototype.findlast/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], + + "array.prototype.findlast/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], + + "array.prototype.findlast/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], + + "array.prototype.findlast/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], + + "array.prototype.findlast/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], + + "array.prototype.findlast/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], + + "array.prototype.findlast/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], + + "array.prototype.findlast/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], + + "array.prototype.findlast/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], + + "array.prototype.findlast/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], + + "array.prototype.findlast/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], + + "array.prototype.findlast/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], + + "array.prototype.findlast/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], + + "bun-types/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "define-data-property/es-define-property/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "define-data-property/gopd/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "drizzle-kit/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "drizzle-kit/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "drizzle-kit/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "drizzle-kit/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "drizzle-kit/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "drizzle-kit/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "drizzle-kit/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "drizzle-kit/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "drizzle-kit/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "drizzle-kit/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "drizzle-kit/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "drizzle-kit/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "drizzle-kit/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "drizzle-kit/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "drizzle-kit/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "drizzle-kit/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "drizzle-kit/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "drizzle-kit/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "drizzle-kit/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "drizzle-kit/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "drizzle-kit/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "drizzle-kit/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "drizzle-kit/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "drizzle-kit/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "drizzle-kit/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "drizzle-kit/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "engine.io/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "eslint-plugin-import/is-core-module/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": "lib/cli.js" }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + + "glob/minimatch/brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], + + "has-property-descriptors/es-define-property/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "hast-util-to-estree/style-to-object/inline-style-parser": ["inline-style-parser@0.1.1", "", {}, "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="], + + "is-regex/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "is-regex/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "is-symbol/safe-regex-test/is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "is-weakset/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "is-weakset/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "is-weakset/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "jsx-ast-utils/array-includes/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "jsx-ast-utils/array-includes/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], + + "jsx-ast-utils/array-includes/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], + + "jsx-ast-utils/array-includes/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "jsx-ast-utils/array-includes/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], + + "jsx-ast-utils/array.prototype.flat/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract": ["es-abstract@1.23.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" } }, "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A=="], + + "jsx-ast-utils/array.prototype.flat/es-shim-unscopables": ["es-shim-unscopables@1.0.2", "", { "dependencies": { "hasown": "^2.0.0" } }, "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw=="], + + "jsx-ast-utils/object.values/call-bind": ["call-bind@1.0.7", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" } }, "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w=="], + + "jsx-ast-utils/object.values/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], + + "mdast-util-find-and-replace/unist-util-is/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "mdast-util-find-and-replace/unist-util-visit-parents/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "mdast-util-mdx-jsx/parse-entities/@types/unist": ["@types/unist@2.0.10", "", {}, "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="], + + "mdast-util-mdx-jsx/parse-entities/character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + + "mdast-util-mdx-jsx/parse-entities/character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "mdast-util-mdx-jsx/parse-entities/character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], + + "mdast-util-mdx-jsx/parse-entities/is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], + + "mdast-util-mdx-jsx/parse-entities/is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], + + "mdast-util-mdx-jsx/parse-entities/is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], + + "mdast-util-phrasing/unist-util-is/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "mdast-util-to-hast/unist-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "mdast-util-to-hast/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "mdast-util-to-hast/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "mdast-util-to-markdown/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "mdast-util-to-markdown/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "next/postcss/nanoid": ["nanoid@3.3.7", "", { "bin": "bin/nanoid.cjs" }, "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="], + + "object.assign/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "object.assign/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "object.fromentries/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "object.fromentries/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "object.fromentries/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], + + "object.fromentries/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], + + "object.fromentries/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], + + "object.fromentries/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], + + "object.fromentries/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], + + "object.fromentries/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "object.fromentries/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], + + "object.fromentries/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], + + "object.fromentries/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], + + "object.fromentries/es-abstract/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "object.fromentries/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], + + "object.fromentries/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], + + "object.fromentries/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], + + "object.fromentries/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "object.fromentries/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "object.fromentries/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], + + "object.fromentries/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], + + "object.fromentries/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], + + "object.fromentries/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], + + "object.fromentries/es-abstract/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], + + "object.fromentries/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], + + "object.fromentries/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], + + "object.fromentries/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], + + "object.fromentries/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], + + "object.fromentries/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], + + "object.fromentries/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], + + "object.fromentries/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], + + "object.fromentries/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], + + "object.fromentries/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], + + "object.fromentries/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], + + "object.fromentries/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], + + "object.fromentries/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], + + "object.fromentries/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], + + "object.groupby/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "object.groupby/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "object.groupby/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], + + "object.groupby/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], + + "object.groupby/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], + + "object.groupby/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], + + "object.groupby/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], + + "object.groupby/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "object.groupby/es-abstract/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], + + "object.groupby/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], + + "object.groupby/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], + + "object.groupby/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], + + "object.groupby/es-abstract/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "object.groupby/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], + + "object.groupby/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], + + "object.groupby/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], + + "object.groupby/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "object.groupby/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "object.groupby/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], + + "object.groupby/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], + + "object.groupby/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], + + "object.groupby/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], + + "object.groupby/es-abstract/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], + + "object.groupby/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], + + "object.groupby/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], + + "object.groupby/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], + + "object.groupby/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], + + "object.groupby/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], + + "object.groupby/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], + + "object.groupby/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], + + "object.groupby/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], + + "object.groupby/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], + + "object.groupby/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], + + "object.groupby/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], + + "object.groupby/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], + + "object.groupby/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], + + "ora/log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], + + "png-to-ico/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "react-email/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "react-email/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "react-email/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "react-email/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "react-email/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "react-email/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "react-email/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "react-email/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "react-email/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "react-email/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "react-email/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "react-email/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "react-email/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "react-email/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "react-email/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "react-email/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "react-email/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "react-email/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "react-email/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "react-email/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "react-email/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "react-email/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "react-email/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "react-email/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "react-email/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "react-email/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "react-email/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "react-markdown/unist-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "react-markdown/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "react-markdown/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "rehype-highlight/unist-util-visit/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + + "rehype-highlight/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "rehype-highlight/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "safe-regex-test/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "safe-regex-test/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "set-function-length/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "set-function-length/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "socket.io-adapter/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "socket.io-parser/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "socket.io/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "string.prototype.trim/safe-regex-test/is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "string.prototype.trimstart/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "string.prototype.trimstart/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "sucrase/glob/foreground-child": ["foreground-child@3.1.1", "", { "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" } }, "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg=="], + + "sucrase/glob/jackspeak": ["jackspeak@2.3.6", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ=="], + + "sucrase/glob/minimatch": ["minimatch@9.0.4", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw=="], + + "sucrase/glob/minipass": ["minipass@7.0.4", "", {}, "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ=="], + + "sucrase/glob/path-scurry": ["path-scurry@1.10.2", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA=="], + + "unist-util-remove-position/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "unist-util-remove-position/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "webpack/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], + + "webpack/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "which-builtin-type/is-regex/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "@babel/helper-compilation-targets/browserslist/update-browserslist-db/escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "@babel/helper-compilation-targets/browserslist/update-browserslist-db/picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "array.prototype.findlast/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "array.prototype.findlast/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "array.prototype.findlast/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], + + "array.prototype.findlast/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + + "array.prototype.findlast/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], + + "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], + + "define-data-property/es-define-property/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "define-data-property/es-define-property/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "define-data-property/gopd/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "define-data-property/gopd/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "has-property-descriptors/es-define-property/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "has-property-descriptors/es-define-property/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "is-regex/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "is-regex/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "is-symbol/safe-regex-test/is-regex/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "jsx-ast-utils/array-includes/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "jsx-ast-utils/array-includes/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], + + "jsx-ast-utils/array-includes/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], + + "jsx-ast-utils/array-includes/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], + + "jsx-ast-utils/array-includes/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], + + "jsx-ast-utils/array-includes/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], + + "jsx-ast-utils/array-includes/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "jsx-ast-utils/array-includes/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], + + "jsx-ast-utils/array-includes/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], + + "jsx-ast-utils/array-includes/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], + + "jsx-ast-utils/array-includes/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], + + "jsx-ast-utils/array-includes/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], + + "jsx-ast-utils/array-includes/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], + + "jsx-ast-utils/array-includes/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "jsx-ast-utils/array-includes/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "jsx-ast-utils/array-includes/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], + + "jsx-ast-utils/array-includes/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], + + "jsx-ast-utils/array-includes/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], + + "jsx-ast-utils/array-includes/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], + + "jsx-ast-utils/array-includes/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], + + "jsx-ast-utils/array-includes/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], + + "jsx-ast-utils/array-includes/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], + + "jsx-ast-utils/array-includes/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], + + "jsx-ast-utils/array-includes/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], + + "jsx-ast-utils/array-includes/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], + + "jsx-ast-utils/array-includes/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], + + "jsx-ast-utils/array-includes/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], + + "jsx-ast-utils/array-includes/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], + + "jsx-ast-utils/array-includes/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], + + "jsx-ast-utils/array-includes/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], + + "jsx-ast-utils/array-includes/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], + + "jsx-ast-utils/array-includes/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], + + "jsx-ast-utils/array-includes/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "jsx-ast-utils/array-includes/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "jsx-ast-utils/array.prototype.flat/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "jsx-ast-utils/array.prototype.flat/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/array-buffer-byte-length": ["array-buffer-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" } }, "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", "define-properties": "^1.2.1", "es-abstract": "^1.22.3", "es-errors": "^1.2.1", "get-intrinsic": "^1.2.3", "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/data-view-buffer": ["data-view-buffer@1.0.1", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/data-view-byte-length": ["data-view-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/data-view-byte-offset": ["data-view-byte-offset@1.0.0", "", { "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/es-object-atoms": ["es-object-atoms@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/es-set-tostringtag": ["es-set-tostringtag@2.0.3", "", { "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/get-symbol-description": ["get-symbol-description@1.0.2", "", { "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4" } }, "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/internal-slot": ["internal-slot@1.0.7", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/is-array-buffer": ["is-array-buffer@3.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" } }, "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/is-data-view": ["is-data-view@1.0.1", "", { "dependencies": { "is-typed-array": "^1.1.13" } }, "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/is-shared-array-buffer": ["is-shared-array-buffer@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7" } }, "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/is-typed-array": ["is-typed-array@1.1.13", "", { "dependencies": { "which-typed-array": "^1.1.14" } }, "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/object-inspect": ["object-inspect@1.13.1", "", {}, "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/regexp.prototype.flags": ["regexp.prototype.flags@1.5.2", "", { "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.1" } }, "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/safe-array-concat": ["safe-array-concat@1.1.2", "", { "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/string.prototype.trim": ["string.prototype.trim@1.2.9", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.0", "es-object-atoms": "^1.0.0" } }, "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/string.prototype.trimend": ["string.prototype.trimend@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/typed-array-buffer": ["typed-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" } }, "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/typed-array-byte-length": ["typed-array-byte-length@1.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/typed-array-byte-offset": ["typed-array-byte-offset@1.0.2", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" } }, "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/typed-array-length": ["typed-array-length@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0" } }, "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/which-typed-array": ["which-typed-array@1.1.15", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.2" } }, "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA=="], + + "jsx-ast-utils/object.values/call-bind/es-define-property": ["es-define-property@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.2.4" } }, "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ=="], + + "jsx-ast-utils/object.values/call-bind/get-intrinsic": ["get-intrinsic@1.2.4", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ=="], + + "mdast-util-mdx-jsx/parse-entities/is-alphanumerical/is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], + + "object.assign/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "object.fromentries/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "object.fromentries/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "object.fromentries/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], + + "object.fromentries/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + + "object.fromentries/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], + + "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], + + "object.groupby/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "object.groupby/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "object.groupby/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], + + "object.groupby/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + + "object.groupby/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], + + "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], + + "safe-regex-test/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "safe-regex-test/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "string.prototype.trim/safe-regex-test/is-regex/hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "string.prototype.trimstart/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "string.prototype.trimstart/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "sucrase/glob/foreground-child/cross-spawn": ["cross-spawn@7.0.3", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="], + + "sucrase/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "sucrase/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "sucrase/glob/path-scurry/lru-cache": ["lru-cache@10.2.0", "", {}, "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q=="], + + "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], + + "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], + + "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], + + "array.prototype.findlast/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + + "jsx-ast-utils/array-includes/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], + + "jsx-ast-utils/array-includes/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + + "jsx-ast-utils/array-includes/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], + + "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], + + "jsx-ast-utils/array.prototype.flat/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "jsx-ast-utils/array.prototype.flat/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/es-to-primitive/is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/es-to-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/internal-slot/side-channel": ["side-channel@1.0.6", "", { "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" } }, "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], + + "jsx-ast-utils/object.values/call-bind/get-intrinsic/has-proto": ["has-proto@1.0.3", "", {}, "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="], + + "jsx-ast-utils/object.values/call-bind/get-intrinsic/has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], + + "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], + + "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], + + "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], + + "object.fromentries/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + + "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], + + "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], + + "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], + + "object.groupby/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + + "sucrase/glob/jackspeak/@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], + + "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], + + "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], + + "jsx-ast-utils/array-includes/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive/is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive/is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive/is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], + + "jsx-ast-utils/array.prototype.flat/es-abstract/unbox-primitive/which-boxed-primitive/is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], + } +} diff --git a/docker-compose.yml b/packages/core/docker-compose.yml similarity index 100% rename from docker-compose.yml rename to packages/core/docker-compose.yml diff --git a/drizzle.config.ts b/packages/core/drizzle.config.ts similarity index 100% rename from drizzle.config.ts rename to packages/core/drizzle.config.ts diff --git a/eslint.config.mjs b/packages/core/eslint.config.mjs similarity index 100% rename from eslint.config.mjs rename to packages/core/eslint.config.mjs diff --git a/messages/en.json b/packages/core/messages/en.json similarity index 100% rename from messages/en.json rename to packages/core/messages/en.json diff --git a/messages/zh.json b/packages/core/messages/zh.json similarity index 100% rename from messages/zh.json rename to packages/core/messages/zh.json diff --git a/packages/core/next-config.mjs b/packages/core/next-config.mjs new file mode 100644 index 0000000..2d9cfcb --- /dev/null +++ b/packages/core/next-config.mjs @@ -0,0 +1,54 @@ +// AI Directory Platform — 站点 Next.js 配置工厂 +// 说明:站点 next.config.mjs 只需 `export { createSiteConfig as default } from "@aidir/core/next-config"` +// MDX/intl/turbopack 等构建依赖由底座包解析,站点零构建依赖。 +import fs from "node:fs"; +import path from "node:path"; + +import rehypePrism from "@mapbox/rehype-prism"; +import nextMDX from "@next/mdx"; +import remarkGfm from "remark-gfm"; +import createNextIntlPlugin from "next-intl/plugin"; + + +/** + * # 函数 createSiteConfig + * 说明:底座统一的站点 Next 配置(next-intl + MDX + 图片域名 + standalone)。 + * 参数:opts.requestPath 站点 i18n request 文件相对路径 + * 返回值:完整 Next 配置 + */ +export function createSiteConfig({ + requestPath = "./src/i18n/request.ts", +} = {}) { + const withNextIntl = createNextIntlPlugin(requestPath); + + /** @type {import('next').NextConfig} */ + const nextConfig = { + output: "standalone", + transpilePackages: ["@aidir/core"], + images: { + // 工具 logo 指向各官网 favicon,域名不可枚举,放开 https 通配 + remotePatterns: [{ protocol: "https", hostname: "**" }], + }, + pageExtensions: ["ts", "tsx", "mdx"], + turbopack: { + rules: { + "*.mdx": { + loaders: ["@mdx-js/loader"], + as: "*.js", + }, + }, + }, + }; + + const withMDX = nextMDX({ + extension: /\.mdx?$/, + options: { + remarkPlugins: [remarkGfm], + rehypePlugins: [rehypePrism], + }, + }); + + return withNextIntl(withMDX(nextConfig)); +} + +export default createSiteConfig; diff --git a/next.config.mjs b/packages/core/next.config.mjs similarity index 100% rename from next.config.mjs rename to packages/core/next.config.mjs diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 0000000..3495945 --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,124 @@ +{ + "name": "@aidir/core", + "version": "1.0.0", + "description": "AI Directory Platform core — shared library for all directory sites", + "private": true, + "keywords": [ + "ai-tools", + "ai-directory", + "ai-tools-directory", + "artificial-intelligence", + "machine-learning", + "nextjs", + "typescript", + "tailwindcss", + "open-source" + ], + "license": "Apache-2.0", + "homepage": "https://toolso.ai", + "repository": { + "type": "git", + "url": "https://github.com/coolchange-ai/toolso-ai-open.git" + }, + "bugs": { + "url": "https://github.com/coolchange-ai/toolso-ai-open/issues" + }, + "author": { + "name": "CoolChange.AI", + "url": "https://coolchange.ai" + }, + "scripts": { + "lint": "eslint .", + "db:generate": "drizzle-kit generate", + "db:migrate": "drizzle-kit migrate", + "db:push": "drizzle-kit push", + "db:studio": "drizzle-kit studio", + "admin:setup": "tsx scripts/setup-admin.ts", + "seed:tools": "tsx scripts/seed-tools.ts", + "generate:blog-manifest": "node scripts/generate-blog-manifest.mjs", + "typecheck": "tsc --noEmit", + "i18n:check": "node scripts/check-i18n.mjs", + "seed:platform": "bun scripts/seed-platform.ts", + "test:e2e": "bun scripts/e2e-interaction.ts", + "shots": "bun scripts/screenshot-pages.ts" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.958.0", + "@better-auth/client": "0.0.2-alpha.3", + "@hookform/resolvers": "^3.4.2", + "@mapbox/rehype-prism": "^0.9.0", + "@mdx-js/loader": "^3.0.1", + "@mdx-js/react": "^3.0.1", + "@next/mdx": "^14.2.3", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-slot": "^1.0.2", + "@react-email/components": "^0.5.3", + "@tabler/icons-react": "^3.5.0", + "@tailwindcss/typography": "^0.5.13", + "@tanstack/react-store": "^0.7.5", + "@types/mdx": "^2.0.13", + "@vercel/analytics": "^1.5.0", + "@vercel/speed-insights": "^1.2.0", + "better-auth": "^1.4.10", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cobe": "^0.6.3", + "date-fns": "^3.6.0", + "drizzle-kit": "^0.31.4", + "drizzle-orm": "^0.44.5", + "fast-glob": "^3.3.2", + "framer-motion": "^12", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "nanoid": "^5.1.6", + "next": "16.1.1", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "postgres": "^3.4.7", + "prettier": "^3.7.4", + "prismjs": "^1.29.0", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-email": "^4.2.11", + "react-hook-form": "^7.51.5", + "react-icons": "^5.2.1", + "react-markdown": "^10.1.0", + "react-wrap-balancer": "^1.1.1", + "reading-time": "^1.5.0", + "rehype-highlight": "^7.0.2", + "remark-gfm": "^4.0.0", + "resend": "^6.1.0", + "sonner": "^2.0.7", + "tailwind-merge": "^2.3.0", + "zod": "^3.23.8" + }, + "devDependencies": { + "@types/bun": "^1.4.2", + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "dotenv": "^17.2.2", + "eslint": "^9.39.5", + "eslint-config-next": "16.1.1", + "pg": "^8.16.3", + "playwright": "^1.57.0", + "png-to-ico": "^3.0.1", + "postcss": "^8", + "sharp": "^0.34.5", + "tailwindcss": "^3.4.1", + "tsx": "^4.20.5", + "typescript": "^5" + }, + "packageManager": "pnpm@10.11.1+sha512.e519b9f7639869dc8d5c3c5dfef73b3f091094b0a006d7317353c72b124e80e1afd429732e28705ad6bfa1ee879c1fce46c128ccebd3192101f43dd67c667912", + "exports": { + "./pages/*": "./src/pages/*", + "./kit/*": "./src/kit/*", + "./src/*": "./src/*", + "./styles/globals.css": "./src/styles/globals.css", + "./messages/*": "./messages/*", + "./proxy": "./src/proxy.ts", + "./i18n.config": "./src/i18n.config.ts", + "./next-config": "./next-config.mjs" + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/packages/core/pnpm-lock.yaml similarity index 100% rename from pnpm-lock.yaml rename to packages/core/pnpm-lock.yaml diff --git a/postcss.config.mjs b/packages/core/postcss.config.mjs similarity index 100% rename from postcss.config.mjs rename to packages/core/postcss.config.mjs diff --git a/public/avatar.jpeg b/packages/core/public/avatar.jpeg similarity index 100% rename from public/avatar.jpeg rename to packages/core/public/avatar.jpeg diff --git a/public/banner.png b/packages/core/public/banner.png similarity index 100% rename from public/banner.png rename to packages/core/public/banner.png diff --git a/public/icon-192.png b/packages/core/public/icon-192.png similarity index 100% rename from public/icon-192.png rename to packages/core/public/icon-192.png diff --git a/public/icon-512.png b/packages/core/public/icon-512.png similarity index 100% rename from public/icon-512.png rename to packages/core/public/icon-512.png diff --git a/public/noise.webp b/packages/core/public/noise.webp similarity index 100% rename from public/noise.webp rename to packages/core/public/noise.webp diff --git a/public/og-image.png b/packages/core/public/og-image.png similarity index 100% rename from public/og-image.png rename to packages/core/public/og-image.png diff --git a/public/robots.txt b/packages/core/public/robots.txt similarity index 100% rename from public/robots.txt rename to packages/core/public/robots.txt diff --git a/public/skeleton-one.png b/packages/core/public/skeleton-one.png similarity index 100% rename from public/skeleton-one.png rename to packages/core/public/skeleton-one.png diff --git a/public/tyler.jpeg b/packages/core/public/tyler.jpeg similarity index 100% rename from public/tyler.jpeg rename to packages/core/public/tyler.jpeg diff --git a/scripts/check-i18n.mjs b/packages/core/scripts/check-i18n.mjs similarity index 100% rename from scripts/check-i18n.mjs rename to packages/core/scripts/check-i18n.mjs diff --git a/scripts/e2e-interaction.ts b/packages/core/scripts/e2e-interaction.ts similarity index 100% rename from scripts/e2e-interaction.ts rename to packages/core/scripts/e2e-interaction.ts diff --git a/packages/core/scripts/e2e/e2e-interaction.ts b/packages/core/scripts/e2e/e2e-interaction.ts new file mode 100644 index 0000000..450d8ad --- /dev/null +++ b/packages/core/scripts/e2e/e2e-interaction.ts @@ -0,0 +1,63 @@ +/** + * # 脚本 e2e-interaction + * 说明:端到端交互验证 —— 登录 → 投票(DB 前后对比)→ 重复提交检测。 + * 在 monorepo 多站点架构下运行(共享同一套 Auth/DB)。 + */ +import { chromium } from "playwright"; +import postgres from "postgres"; + +const BASE = process.env.E2E_BASE || "http://localhost:3001"; +const sql = postgres( + process.env.DATABASE_URL || "postgresql://postgres:postgres@127.0.0.1:15433/ai_directory", + { prepare: false } +); +const results: string[] = []; + +const browser = await chromium.launch(); +const context = await browser.newContext({ viewport: { width: 1440, height: 900 } }); +const page = await context.newPage(); + +const countClaudeVotes = async () => + Number((await sql`SELECT COUNT(*) FROM vote WHERE tool_id='tool_claude'`)[0].count); + +// 1) 登录 +await page.goto(`${BASE}/login`, { waitUntil: "domcontentloaded" }); +await page.fill('input[type="email"]', "bob@demo.dev"); +await page.fill('input[type="password"]', "password123"); +await page.click('button[type="submit"]'); +await page.waitForTimeout(2500); +results.push(`1) 登录后 URL: ${page.url()}`); + +await page.screenshot({ path: "/tmp/aidir-mono/e2e-after-login.png" }); +results.push(`1b) 登录后用户菜单存在: ${await page.locator("header img, header button").count() > 0}`); + +// 2) 投票 toggle(DB 前后对比) +const before = await countClaudeVotes(); +await page.goto(`${BASE}/tools/claude`, { waitUntil: "domcontentloaded" }); +await page.waitForTimeout(1500); +await page.screenshot({ path: "/tmp/aidir-mono/e2e-detail.png" }); +const btnCount = await page.locator("button", { hasText: /Upvote|Upvoted/ }).count(); +results.push(`2a) 找到投票按钮数: ${btnCount}`); +const btn = page.locator("button", { hasText: /Upvote|Upvoted/ }).first(); +await btn.click(); +await page.waitForTimeout(2500); +const after = await countClaudeVotes(); +results.push(`2) 投票: DB ${before}→${after},按钮 "${((await btn.textContent()) ?? "").trim()}" → ${before !== after ? "PASS" : "FAIL"}`); +await btn.click(); +await page.waitForTimeout(2500); +const restored = await countClaudeVotes(); +results.push(`3) 取消投票: DB 回到 ${restored} → ${restored === before ? "PASS" : "FAIL"}`); + +// 4) 重复提交检测 +await page.goto(`${BASE}/submit`, { waitUntil: "domcontentloaded" }); +await page.fill('input[placeholder="ChatGPT"]', "ChatGPT"); +await page.fill('input[type="url"]', "https://chatgpt.com"); +await page.locator('input[type="url"]').blur(); +await page.waitForTimeout(1500); +const dupVisible = await page.locator("text=already be listed").count(); +results.push(`4) 重复检测: ${dupVisible > 0 ? "PASS" : "FAIL"}`); +await page.screenshot({ path: "/tmp/aidir-mono/e2e-duplicate.png" }); + +await browser.close(); +await sql.end(); +console.log(results.join("\n")); diff --git a/scripts/generate-blog-manifest.mjs b/packages/core/scripts/generate-blog-manifest.mjs similarity index 92% rename from scripts/generate-blog-manifest.mjs rename to packages/core/scripts/generate-blog-manifest.mjs index 063625b..fe5f1de 100644 --- a/scripts/generate-blog-manifest.mjs +++ b/packages/core/scripts/generate-blog-manifest.mjs @@ -3,7 +3,7 @@ import path from "node:path"; import glob from "fast-glob"; async function main() { - const blogRoot = path.join(process.cwd(), "src/app/[locale]/(marketing)/blog"); + const blogRoot = path.join(process.cwd(), "src/content/blog"); const entries = await glob("**/*.mdx", { cwd: blogRoot }); const manifest = new Map(); @@ -51,9 +51,7 @@ async function main() { // 使用 path.posix 确保导入路径始终使用 / (跨平台兼容) const importPath = path.posix.join( "..", - "app", - "[locale]", - "(marketing)", + "content", "blog", slug, `${locale}.mdx` diff --git a/packages/core/scripts/generate-site.mjs b/packages/core/scripts/generate-site.mjs new file mode 100644 index 0000000..198d7cb --- /dev/null +++ b/packages/core/scripts/generate-site.mjs @@ -0,0 +1,705 @@ +/** + * # 脚本 generate-site + * 说明:从底座生成一个独立网站应用(sites//)。 + * - src/app/**:全部为薄路由(re-export core/src/pages 的同名模块) + * - (marketing)/layout + 首页:站点组合器(品牌 + 站点首页组件) + * - messages/:core 基础文案 + 站点品牌 SEO 覆盖 + * - 配置:独立 package.json / next.config / tsconfig / tailwind / postcss + * + * 用法:bun scripts/generate-site.mjs + * 站点定义见本文件 SITES 常量。 + */ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const CORE_ROOT = path.resolve(__dirname, ".."); +const REPO_ROOT = path.resolve(CORE_ROOT, "..", ".."); +const SITES_ROOT = path.join(REPO_ROOT, "sites"); + +// ==================================================================== +// 站点定义:一个条目 = 一个独立网站(品牌 / 导航 / 页脚 / 首页 / 端口) +// ==================================================================== +const SITES = { + "ai-stack": { + port: 3001, + theme: "classic", + brand: { + name: "AI Stack", + tagline: "The professional AI tools directory — ranked by the community.", + headline: "Find the best AI tools, ranked by real users", + subheadline: + "1,000+ AI tools across 14 categories. Compare votes, reviews and pricing to pick the right one.", + }, + navItems: [ + { label: "Discover", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Best Lists", href: "/best" }, + { label: "Rankings", href: "/rankings" }, + { label: "Blog", href: "/blog" }, + { label: "Submit", href: "/submit" }, + ], + footerGroups: [ + { + title: "Discover", + links: [ + { label: "All Tools", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Best Lists", href: "/best" }, + { label: "Rankings", href: "/rankings" }, + ], + }, + { + title: "Community", + links: [ + { label: "Submit a Tool", href: "/submit" }, + { label: "Blog", href: "/blog" }, + { label: "Dashboard", href: "/dashboard" }, + ], + }, + { + title: "Legal", + links: [ + { label: "Terms", href: "/terms" }, + { label: "Privacy", href: "/privacy" }, + { label: "Contact", href: "/contact" }, + ], + }, + ], + searchPlaceholder: "Search AI tools...", + seo: { + en: { + title: "AI Stack — Find the Best AI Tools, Ranked by Real Users", + description: + "The professional AI tools directory. 1,000+ AI tools across 14 categories ranked by community votes, reviews and engagement.", + }, + zh: { + title: "AI Stack — 由真实用户排名的 AI 工具目录", + description: "专业 AI 工具导航:14 个分类、1000+ 工具,由社区投票、评论与互动数据实时排名。", + }, + }, + }, + launchai: { + port: 3002, + theme: "product", + brand: { + name: "LaunchAI", + tagline: "Discover and upvote today's AI products.", + headline: "Today's AI product launches", + subheadline: "Fresh AI products, every day. Upvote the best ones to the top.", + }, + navItems: [ + { label: "Today", href: "/" }, + { label: "Leaderboard", href: "/rankings" }, + { label: "Categories", href: "/tools" }, + { label: "Collections", href: "/best" }, + { label: "Blog", href: "/blog" }, + { label: "Submit", href: "/submit" }, + ], + footerGroups: [ + { + title: "Community", + links: [ + { label: "Submit a Product", href: "/submit" }, + { label: "Leaderboard", href: "/rankings" }, + { label: "Dashboard", href: "/dashboard" }, + ], + }, + { + title: "Explore", + links: [ + { label: "All Products", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Collections", href: "/best" }, + ], + }, + { + title: "About", + links: [ + { label: "Blog", href: "/blog" }, + { label: "Terms", href: "/terms" }, + { label: "Privacy", href: "/privacy" }, + ], + }, + ], + searchPlaceholder: "Search AI products...", + seo: { + en: { + title: "LaunchAI — Discover and Upvote Today's AI Products", + description: + "A daily launch feed for AI products. Upvote the best AI tools, follow makers and climb the leaderboard.", + }, + zh: { + title: "LaunchAI — 发现并投票今日 AI 新品", + description: "AI 产品每日发布社区:为最好的 AI 工具投票,登上社区排行榜。", + }, + }, + }, + "the-ai-ledger": { + port: 3003, + theme: "editorial", + brand: { + name: "The AI Ledger", + tagline: "Independent journalism on AI tools, with a community-ranked directory.", + headline: "AI tools, reviewed and ranked", + subheadline: + "Guides, comparisons and a community-powered directory of the best AI tools.", + }, + navItems: [ + { label: "Stories", href: "/blog" }, + { label: "Guides", href: "/ai-tools-for" }, + { label: "Best Picks", href: "/best" }, + { label: "Directory", href: "/tools" }, + { label: "Rankings", href: "/rankings" }, + { label: "Submit", href: "/submit" }, + ], + footerGroups: [ + { + title: "Read", + links: [ + { label: "Latest Stories", href: "/blog" }, + { label: "Buying Guides", href: "/best" }, + { label: "Use Case Guides", href: "/ai-tools-for" }, + ], + }, + { + title: "Directory", + links: [ + { label: "All Tools", href: "/tools" }, + { label: "Community Rankings", href: "/rankings" }, + { label: "Submit a Tool", href: "/submit" }, + ], + }, + { + title: "Company", + links: [ + { label: "Contact", href: "/contact" }, + { label: "Terms", href: "/terms" }, + { label: "Privacy", href: "/privacy" }, + ], + }, + ], + searchPlaceholder: "Search the directory...", + seo: { + en: { + title: "The AI Ledger — AI Tools, Reviewed and Ranked", + description: + "Independent journalism on AI: buying guides, comparisons and a community-ranked directory of the best AI tools.", + }, + zh: { + title: "The AI Ledger — AI 工具评测与排名", + description: "独立 AI 媒体:深度指南、横向对比,以及由社区排名的 AI 工具目录。", + }, + }, + }, + "devai-tools": { + port: 3004, + theme: "niche", + brand: { + name: "DevAI.tools", + tagline: "AI tools for developers — curated, tested, ranked by the community.", + headline: "AI tools for developers", + subheadline: + "Code assistants, DevOps automation, testing copilots and everything else you ship with.", + }, + navItems: [ + { label: "Tools", href: "/tools" }, + { label: "Workflows", href: "/best" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Rankings", href: "/rankings" }, + { label: "Submit", href: "/submit" }, + ], + footerGroups: [ + { + title: "Directory", + links: [ + { label: "All Tools", href: "/tools" }, + { label: "Rankings", href: "/rankings" }, + { label: "Use Cases", href: "/ai-tools-for" }, + ], + }, + { + title: "Build", + links: [ + { label: "Workflows", href: "/best" }, + { label: "Submit a Tool", href: "/submit" }, + { label: "Blog", href: "/blog" }, + ], + }, + { + title: "Legal", + links: [ + { label: "Terms", href: "/terms" }, + { label: "Privacy", href: "/privacy" }, + ], + }, + ], + searchPlaceholder: "Search dev tools...", + seo: { + en: { + title: "DevAI.tools — AI Tools for Developers", + description: + "Code assistants, DevOps automation and testing copilots — the AI tools developers actually upvote, ranked daily.", + }, + zh: { + title: "DevAI.tools — 开发者 AI 工具", + description: "面向开发者的 AI 工具目录:代码助手、运维自动化、测试副驾驶,由社区每日排名。", + }, + }, + }, + findai: { + port: 3005, + theme: "minimal", + brand: { + name: "findai", + tagline: "The minimal AI tool search engine.", + headline: "What are you trying to do?", + subheadline: "", + }, + navItems: [ + { label: "Search", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Rankings", href: "/rankings" }, + { label: "Submit", href: "/submit" }, + ], + footerGroups: [ + { + title: "Search", + links: [ + { label: "All Tools", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Rankings", href: "/rankings" }, + ], + }, + { + title: "About", + links: [ + { label: "Submit a Tool", href: "/submit" }, + { label: "Privacy", href: "/privacy" }, + { label: "Terms", href: "/terms" }, + ], + }, + ], + searchPlaceholder: "What do you need?", + seo: { + en: { + title: "findai — The Minimal AI Tool Search Engine", + description: + "One search box, every AI tool. Describe what you're trying to do and find the right AI tool, ranked by the community.", + }, + zh: { + title: "findai — 极简 AI 工具搜索引擎", + description: "一个搜索框,找遍全部 AI 工具。说出你想做的事,社区排名替你选。", + }, + }, + }, +}; + +// ==================================================================== +// 生成逻辑 +// ==================================================================== + +/** 遍历 core/src/pages 下所有 page.tsx / route.ts,返回相对路由信息 */ +function collectRoutes() { + const pagesRoot = path.join(CORE_ROOT, "src", "pages"); + const routes = []; + + function walk(dir) { + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + walk(full); + } else if ( + entry.name === "page.tsx" || + entry.name === "route.ts" || + entry.name === "layout.tsx" || + entry.name === "not-found.tsx" || + entry.name === "manifest.ts" || + entry.name === "sitemap.ts" + ) { + const rel = path.relative(pagesRoot, full); + const kind = + entry.name === "route.ts" + ? "route" + : entry.name === "layout.tsx" + ? "layout" + : "page"; + routes.push({ rel, kind, full }); + } + } + } + walk(pagesRoot); + return routes; +} + +/** 从 core 页面模块源码中提取可 re-export 的导出名 */ +/** + * 从 core 页面模块源码中提取导出: + * - 函数导出(default/generateMetadata/generateStaticParams...)→ re-export + * - 路由段配置常量(revalidate/dynamic...)→ 内联字面量(Next 要求静态可解析,不能 re-export) + */ +function extractExports(file, kind) { + const srcText = fs.readFileSync(file, "utf8"); + const names = new Set(); + const inlineConfigs = []; + + if (kind !== "route" && /export\s+default/.test(srcText)) { + names.add("default"); + } + + const fnRe = /export\s+(?:async\s+)?function\s+([A-Za-z0-9_]+)/g; + for (const m of srcText.matchAll(fnRe)) names.add(m[1]); + + const configNames = ["revalidate", "dynamic", "runtime", "fetchCache", "maxDuration", "dynamicParams"]; + const constRe = /export\s+const\s+([A-Za-z0-9_]+)\s*=\s*([^;\n]+);/g; + for (const m of srcText.matchAll(constRe)) { + const full = m[0]; + const name = m[1]; + if (configNames.includes(name)) { + inlineConfigs.push(full); + } + } + + // route 的解构导出(如 export const { POST, GET } = ...)→ 整句 re-export + const destructureRe = /export\s+const\s*\{([^}]+)\}\s*=[^;\n]+;/g; + for (const m of srcText.matchAll(destructureRe)) { + for (const raw of m[1].split(",")) { + const name = raw.trim().split(":")[0].trim(); + if (/^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)$/.test(name)) names.add(name); + } + } + + return { + names: [...names].filter((n) => !n.startsWith("type")), + inlineConfigs, + }; +} + +function writeFileSafe(file, content) { + fs.mkdirSync(path.dirname(file), { recursive: true }); + fs.writeFileSync(file, content); +} + +function generateSite(siteKey) { + const site = SITES[siteKey]; + if (!site) throw new Error(`Unknown site: ${siteKey}. 可选: ${Object.keys(SITES).join(", ")}`); + const siteRoot = path.join(SITES_ROOT, siteKey); + + console.log(`\n=== 生成站点 ${siteKey} (port ${site.port}, theme ${site.theme}) ===`); + fs.mkdirSync(siteRoot, { recursive: true }); + // 清空生成物,但保留本地环境与依赖 + for (const entry of fs.readdirSync(siteRoot)) { + if (entry === ".env.local" || entry === "node_modules") continue; + fs.rmSync(path.join(siteRoot, entry), { recursive: true, force: true }); + } + + const corePkg = "@aidir/core"; + + // ---------- 1) 薄路由 ---------- + const skipRoutes = new Set([ + // 站点组合器文件由下方单独生成(营销布局 + 首页) + "[locale]/(marketing)/layout.tsx", + "[locale]/(marketing)/page.tsx", + // 根布局单独生成(需引入站点样式) + "layout.tsx", + ]); + let routeCount = 0; + for (const route of collectRoutes()) { + if (skipRoutes.has(route.rel)) continue; + const rel = route.rel.replace(/\\/g, "/"); + const target = path.join(siteRoot, "src", "app", rel); + const importPath = `${corePkg}/pages/${rel.replace(/\.tsx?$/, "")}`; + const { names, inlineConfigs } = extractExports(route.full, route.kind); + if (names.length === 0 && inlineConfigs.length === 0) continue; + + let content = `// 自动生成:${rel} 的薄路由\n`; + for (const cfg of inlineConfigs) content += `${cfg}\n`; + if (names.length > 0) { + content += `export { ${names.join(", ")} } from "${importPath}";\n`; + } + writeFileSafe(target, content); + routeCount++; + } + + // ---------- 2) 根布局(css + 透传) ---------- + writeFileSafe( + path.join(siteRoot, "src/app/layout.tsx"), + `import "${corePkg}/styles/globals.css";\n\nexport { default } from "${corePkg}/pages/app-layout";\n` + ); + + // ---------- 3) 营销布局 + 首页(站点组合器) ---------- + writeFileSafe( + path.join(siteRoot, "src/app/[locale]/(marketing)/layout.tsx"), + `import { createMarketingLayout } from "${corePkg}/kit/create-marketing-layout";\nimport { siteConfig } from "@/site/brand";\n\nexport default createMarketingLayout(siteConfig);\n` + ); + + writeFileSafe( + path.join(siteRoot, "src/app/[locale]/(marketing)/page.tsx"), + `import { createHomePage, createHomeMetadata } from "${corePkg}/kit/create-home";\nimport { siteConfig } from "@/site/brand";\nimport { SiteHome } from "@/site/home";\n\n// 首页内容变化不频繁,ISR 每小时再生\nexport const revalidate = 3600;\n\nexport const generateMetadata = createHomeMetadata(siteConfig);\nexport default createHomePage(siteConfig, SiteHome);\n` + ); + + // ---------- 4) 站点品牌 + 首页组件 ---------- + const themeSrc = fs.readFileSync( + path.join(CORE_ROOT, "src/kit/site-themes", site.theme, "index.tsx"), + "utf8" + ); + // 改写 import:kit 路径 + 站点品牌 + let homeSrc = themeSrc + .replace(/from "[.\/]*shared\/(section|home-data)"/g, 'from "@/kit/$1"') + .replace(/from "[.\/]*shared\/theme-header"/g, 'from "@/kit/theme-header"') + .replace(/from "[.\/]*shared\/theme-footer"/g, 'from "@/kit/theme-footer"') + .replace(/import type \{ ThemeModule \} from "[.\/]*types";\n/g, ""); + // 去掉主题文件里的 brand 常量与尾部主题注册导出(品牌来自 brand.tsx) + homeSrc = homeSrc.replace(/const brand = \{[\s\S]*?\};/, ""); + const tailIdx = homeSrc.indexOf("\nexport const "); + if (tailIdx !== -1) homeSrc = homeSrc.slice(0, tailIdx); + // 统一导出名为 SiteHome(原函数如 ClassicHome / ProductHome...) + homeSrc = homeSrc.replace( + /(async\s+function\s+)(\w+Home)(\s*\()/, + "$1SiteHome$3" + ); + homeSrc += "\nexport { SiteHome };\n"; + // 未使用的 brand 引用替换 + homeSrc = homeSrc.replace(/\bbrand\.name\b/g, "siteConfig.brand.name") + .replace(/\bbrand\.headline\b/g, "siteConfig.brand.headline") + .replace(/\bbrand\.subheadline\b/g, "siteConfig.brand.subheadline") + .replace(/\bbrand\.tagline\b/g, "siteConfig.brand.tagline"); + // 追加 import siteConfig + const firstImport = homeSrc.indexOf('import '); + homeSrc = + homeSrc.slice(0, firstImport) + + 'import { siteConfig } from "@/site/brand";\n' + + homeSrc.slice(firstImport); + homeSrc = + `// 自动生成:站点首页组件(源自底座 ${site.theme} 形态,品牌来自 @/site/brand)\n` + + homeSrc; + writeFileSafe(path.join(siteRoot, "src/site/home.tsx"), homeSrc); + + // brand.tsx(SiteConfig,不含 theme 生成元数据) + const { theme: _theme, ...siteConfigData } = site; + siteConfigData.id = siteKey; + writeFileSafe( + path.join(siteRoot, "src/site/brand.tsx"), + `import type { SiteConfig } from "@/kit/types";\n\n// ${site.brand.name} —— 独立站点的全部品牌/导航/页脚配置\nexport const siteConfig: SiteConfig = ${JSON.stringify(siteConfigData, null, 2)};\n` + ); + + // ---------- 5) i18n request(站点文案覆盖) ---------- + writeFileSafe( + path.join(siteRoot, "src/i18n/request.ts"), + `import { getRequestConfig } from "next-intl/server"; +import { notFound } from "next/navigation"; +import { locales, defaultLocale, type Locale } from "${corePkg}/i18n.config"; + +/** 站点品牌 SEO 文案覆盖(每个网站不同) */ +const brandMessages = { + en: { + seo: { home: ${JSON.stringify({ title: site.seo.en.title, description: site.seo.en.description, ogImage: "/og-image.png" })} }, + hero: { title: ${JSON.stringify(site.seo.en.title)}, description: ${JSON.stringify(site.seo.en.description)} }, + common: { brand: { name: ${JSON.stringify(site.brand.name)}, tagline: ${JSON.stringify(site.brand.tagline)} } }, + }, + zh: { + seo: { home: ${JSON.stringify({ title: site.seo.zh.title, description: site.seo.zh.description, ogImage: "/og-image.png" })} }, + hero: { title: ${JSON.stringify(site.seo.zh.title)}, description: ${JSON.stringify(site.seo.zh.description)} }, + common: { brand: { name: ${JSON.stringify(site.brand.name)}, tagline: ${JSON.stringify(site.brand.tagline)} } }, + }, +} as const; + +export default getRequestConfig(async ({ requestLocale }) => { + let locale = await requestLocale; + if (!locale || !locales.includes(locale as Locale)) { + locale = defaultLocale; + } + try { + // 底座基础文案 + 站点品牌覆盖(浅合并到顶层命名空间) + const base = (await import(\`${corePkg}/messages/\${locale}.json\`)).default; + const override = brandMessages[locale as keyof typeof brandMessages]; + const messages = { ...base }; + for (const [ns, value] of Object.entries(override)) { + messages[ns] = { ...(messages[ns] ?? {}), ...value }; + } + return { locale, messages }; + } catch (error) { + console.error("Error loading messages for locale:", locale, error); + notFound(); + } +}); +` + ); + + // ---------- 6) proxy / mdx-components ---------- + writeFileSafe( + path.join(siteRoot, "src/proxy.ts"), + `import { proxy } from "${corePkg}/proxy";\n\nexport default proxy;\n\nexport const config = {\n matcher: [\n "/",\n "/((?!api|_next|_vercel|.*\\\\..*).*)"\n ]\n};\n` + ); + writeFileSafe( + path.join(siteRoot, "mdx-components.tsx"), + `export { useMDXComponents } from "${corePkg}/src/mdx-components";\n` + ); + + // ---------- 7) 配置文件 ---------- + writeFileSafe( + path.join(siteRoot, "package.json"), + JSON.stringify( + { + name: `site-${siteKey}`, + version: "1.0.0", + description: `${site.brand.name} — AI directory site powered by @aidir/core`, + private: true, + scripts: { + dev: `next dev -p ${site.port}`, + build: "next build", + start: `next start -p ${site.port}`, + typecheck: "tsc --noEmit", + }, + dependencies: { + "@aidir/core": "workspace:*", + next: "16.1.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "sonner": "^2.0.7", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "framer-motion": "^12.43.0", + }, + devDependencies: { + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@types/mdx": "^2.0.13", + "typescript": "^5", + "tailwindcss": "^3.4.1", + "postcss": "^8", + }, + }, + null, + 2 + ) + "\n" + ); + + writeFileSafe( + path.join(siteRoot, "next.config.mjs"), + `import createSiteConfig from "@aidir/core/next-config";\n\nexport default createSiteConfig({\n requestPath: "./src/i18n/request.ts",\n});\n` + ); + + writeFileSafe( + path.join(siteRoot, "tsconfig.json"), + JSON.stringify( + { + compilerOptions: { + target: "ES2017", + lib: ["dom", "dom.iterable", "esnext"], + allowJs: true, + skipLibCheck: true, + strict: true, + noEmit: true, + esModuleInterop: true, + module: "esnext", + moduleResolution: "bundler", + resolveJsonModule: true, + isolatedModules: true, + jsx: "preserve", + incremental: true, + plugins: [{ name: "next" }], + paths: { + "@/*": ["./src/*", "../../packages/core/src/*"], + "@aidir/core/pages/*": ["../../packages/core/src/pages/*"], + "@aidir/core/kit/*": ["../../packages/core/src/kit/*"], + "@aidir/core/src/*": ["../../packages/core/src/*"], + "@aidir/core/proxy": ["../../packages/core/src/proxy.ts"], + "@aidir/core/i18n.config": ["../../packages/core/src/i18n.config.ts"], + "@aidir/core/styles/globals.css": ["../../packages/core/src/styles/globals.css"], + "@aidir/core/*": ["../../packages/core/src/*", "../../packages/core/*"], + }, + }, + include: ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + exclude: ["node_modules"], + }, + null, + 2 + ) + "\n" + ); + + writeFileSafe( + path.join(siteRoot, "postcss.config.mjs"), + `const config = {\n plugins: {\n tailwindcss: {},\n },\n};\n\nexport default config;\n` + ); + + // tailwind:content 扫描站点 + 底座;主题/插件来自底座 preset + writeFileSafe( + path.join(siteRoot, "tailwind.config.ts"), + `import type { Config } from "tailwindcss";\n\nconst config: Config = {\n content: [\n "./src/**/*.{js,ts,jsx,tsx,mdx}",\n "../../packages/core/src/**/*.{js,ts,jsx,tsx,mdx}",\n ],\n presets: [require("../../packages/core/tailwind.preset.cjs")],\n};\n\nexport default config;\n` + ); + + // ---------- 8) messages(base 由 i18n request 运行时合并;站点仍保留一份覆盖说明) ---------- + // 静态拷贝 core messages 便于独立部署检查 + for (const locale of ["en", "zh"]) { + const base = JSON.parse(fs.readFileSync(path.join(CORE_ROOT, "messages", `${locale}.json`), "utf8")); + // 品牌覆盖(静态合并进 messages,运行时 request.ts 仍会覆盖以双保险) + base.common = base.common ?? {}; + base.common.brand = { ...(base.common.brand ?? {}), name: site.brand.name, tagline: site.brand.tagline }; + base.seo = base.seo ?? {}; + base.seo.home = { ...(base.seo.home ?? {}), ...site.seo[locale] }; + base.hero = { ...(base.hero ?? {}), title: site.seo[locale].title, description: site.seo[locale].description }; + fs.mkdirSync(path.join(siteRoot, "messages"), { recursive: true }); + fs.writeFileSync( + path.join(siteRoot, "messages", `${locale}.json`), + JSON.stringify(base, null, 2) + "\n" + ); + } + + // 但 request.ts 目前从 core 读基础文案 —— 改为读本站 messages(保证站点内容独立可改) + let requestSrc = fs.readFileSync(path.join(siteRoot, "src/i18n/request.ts"), "utf8"); + requestSrc = requestSrc.replace( + 'const base = (await import(`@aidir/core/messages/${locale}.json`)).default;', + 'const base = (await import(`../../messages/${locale}.json`)).default;' + ); + writeFileSafe(path.join(siteRoot, "src/i18n/request.ts"), requestSrc); + + // ---------- 9) public + env ---------- + fs.cpSync(path.join(CORE_ROOT, "public"), path.join(siteRoot, "public"), { recursive: true }); + // 品牌首字母 favicon(SVG,无 Emoji) + const initial = site.brand.name.slice(0, 1).toUpperCase(); + writeFileSafe( + path.join(siteRoot, "public", "icon.svg"), + `${initial}\n` + ); + writeFileSafe( + path.join(siteRoot, ".env.example"), + `# ${site.brand.name} 环境变量(与底座共享同一套 PostgreSQL / Better Auth / Admin) +DATABASE_URL="postgresql://postgres:postgres@127.0.0.1:15433/ai_directory" +BETTER_AUTH_SECRET="dev-secret-ai-directory-platform-0123456789abcdef" +BETTER_AUTH_URL="http://localhost:${site.port}" +AUTH_GOOGLE_ID="" +AUTH_GOOGLE_SECRET="" +NEXT_PUBLIC_AUTH_GOOGLE_ENABLED="false" +AUTH_GITHUB_ID="" +AUTH_GITHUB_SECRET="" +NEXT_PUBLIC_AUTH_GITHUB_ENABLED="false" +RESEND_API_KEY="" +RESEND_FROM_EMAIL="${site.brand.name} " +NEXT_PUBLIC_APP_URL="http://localhost:${site.port}" +NEXT_PUBLIC_APP_NAME="${site.brand.name}" +` + ); + + // ---------- 10) .gitignore ---------- + writeFileSafe( + path.join(siteRoot, ".gitignore"), + "/node_modules\n/.next\n/.env*.local\nnext-env.d.ts\n*.tsbuildinfo\n" + ); + + console.log(`路由薄文件: ${routeCount + 2}(含根布局/营销布局/首页组合器)`); + console.log(`输出: sites/${siteKey}`); +} + +// main +const key = process.argv[2]; +if (!key || key === "all") { + for (const k of Object.keys(SITES)) generateSite(k); +} else { + generateSite(key); +} diff --git a/scripts/run-dev.mjs b/packages/core/scripts/run-dev.mjs similarity index 100% rename from scripts/run-dev.mjs rename to packages/core/scripts/run-dev.mjs diff --git a/scripts/screenshot-pages.ts b/packages/core/scripts/screenshot-pages.ts similarity index 100% rename from scripts/screenshot-pages.ts rename to packages/core/scripts/screenshot-pages.ts diff --git a/scripts/seed-platform.ts b/packages/core/scripts/seed-platform.ts similarity index 100% rename from scripts/seed-platform.ts rename to packages/core/scripts/seed-platform.ts diff --git a/scripts/seed-tools.ts b/packages/core/scripts/seed-tools.ts similarity index 100% rename from scripts/seed-tools.ts rename to packages/core/scripts/seed-tools.ts diff --git a/scripts/setup-admin.ts b/packages/core/scripts/setup-admin.ts similarity index 100% rename from scripts/setup-admin.ts rename to packages/core/scripts/setup-admin.ts diff --git a/packages/core/scripts/start-all-sites.sh b/packages/core/scripts/start-all-sites.sh new file mode 100644 index 0000000..c9738c1 --- /dev/null +++ b/packages/core/scripts/start-all-sites.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# 启动五个独立网站(monorepo sites/*,共享同一套数据库/Auth/Admin) +# ai-stack:3001 launchai:3002 the-ai-ledger:3003 devai-tools:3004 findai:3005 +set -e +cd "$(dirname "$0")/../../.." + +SITES=(ai-stack:3001 launchai:3002 the-ai-ledger:3003 devai-tools:3004 findai:3005) + +for entry in "${SITES[@]}"; do + site="${entry%%:*}" + port="${entry##*:}" + (cd "sites/$site" && bun run start > "/tmp/site-$site.log" 2>&1) & + echo "$site → http://localhost:$port (pid $!)" +done + +echo "等待启动..." +sleep 5 +for entry in "${SITES[@]}"; do + site="${entry%%:*}" + port="${entry##*:}" + code=$(curl -s -o /dev/null -w "%{http_code}" "http://localhost:$port/" || echo "000") + echo "$site [$port] → HTTP $code" +done + +wait diff --git a/scripts/vote-check.ts b/packages/core/scripts/vote-check.ts similarity index 100% rename from scripts/vote-check.ts rename to packages/core/scripts/vote-check.ts diff --git a/src/analytics/analytics.tsx b/packages/core/src/analytics/analytics.tsx similarity index 100% rename from src/analytics/analytics.tsx rename to packages/core/src/analytics/analytics.tsx diff --git a/src/analytics/clarity-analytics.tsx b/packages/core/src/analytics/clarity-analytics.tsx similarity index 100% rename from src/analytics/clarity-analytics.tsx rename to packages/core/src/analytics/clarity-analytics.tsx diff --git a/src/analytics/google-analytics.tsx b/packages/core/src/analytics/google-analytics.tsx similarity index 100% rename from src/analytics/google-analytics.tsx rename to packages/core/src/analytics/google-analytics.tsx diff --git a/src/components/Logo.tsx b/packages/core/src/components/Logo.tsx similarity index 100% rename from src/components/Logo.tsx rename to packages/core/src/components/Logo.tsx diff --git a/src/components/background.tsx b/packages/core/src/components/background.tsx similarity index 100% rename from src/components/background.tsx rename to packages/core/src/components/background.tsx diff --git a/src/components/badge.tsx b/packages/core/src/components/badge.tsx similarity index 100% rename from src/components/badge.tsx rename to packages/core/src/components/badge.tsx diff --git a/src/components/blog-card.tsx b/packages/core/src/components/blog-card.tsx similarity index 100% rename from src/components/blog-card.tsx rename to packages/core/src/components/blog-card.tsx diff --git a/src/components/blog-layout.tsx b/packages/core/src/components/blog-layout.tsx similarity index 100% rename from src/components/blog-layout.tsx rename to packages/core/src/components/blog-layout.tsx diff --git a/src/components/blur-image.tsx b/packages/core/src/components/blur-image.tsx similarity index 100% rename from src/components/blur-image.tsx rename to packages/core/src/components/blur-image.tsx diff --git a/src/components/button.tsx b/packages/core/src/components/button.tsx similarity index 100% rename from src/components/button.tsx rename to packages/core/src/components/button.tsx diff --git a/src/components/common.module.css b/packages/core/src/components/common.module.css similarity index 100% rename from src/components/common.module.css rename to packages/core/src/components/common.module.css diff --git a/src/components/container.tsx b/packages/core/src/components/container.tsx similarity index 100% rename from src/components/container.tsx rename to packages/core/src/components/container.tsx diff --git a/src/components/cta.tsx b/packages/core/src/components/cta.tsx similarity index 100% rename from src/components/cta.tsx rename to packages/core/src/components/cta.tsx diff --git a/src/components/featured-testimonials.tsx b/packages/core/src/components/featured-testimonials.tsx similarity index 100% rename from src/components/featured-testimonials.tsx rename to packages/core/src/components/featured-testimonials.tsx diff --git a/src/components/featured-tools.tsx b/packages/core/src/components/featured-tools.tsx similarity index 100% rename from src/components/featured-tools.tsx rename to packages/core/src/components/featured-tools.tsx diff --git a/src/components/features.tsx b/packages/core/src/components/features.tsx similarity index 100% rename from src/components/features.tsx rename to packages/core/src/components/features.tsx diff --git a/src/components/footer.tsx b/packages/core/src/components/footer.tsx similarity index 100% rename from src/components/footer.tsx rename to packages/core/src/components/footer.tsx diff --git a/src/components/globe.tsx b/packages/core/src/components/globe.tsx similarity index 100% rename from src/components/globe.tsx rename to packages/core/src/components/globe.tsx diff --git a/src/components/grid-lines.tsx b/packages/core/src/components/grid-lines.tsx similarity index 100% rename from src/components/grid-lines.tsx rename to packages/core/src/components/grid-lines.tsx diff --git a/src/components/heading.tsx b/packages/core/src/components/heading.tsx similarity index 100% rename from src/components/heading.tsx rename to packages/core/src/components/heading.tsx diff --git a/src/components/hero.tsx b/packages/core/src/components/hero.tsx similarity index 100% rename from src/components/hero.tsx rename to packages/core/src/components/hero.tsx diff --git a/src/components/horizontal-gradient.tsx b/packages/core/src/components/horizontal-gradient.tsx similarity index 100% rename from src/components/horizontal-gradient.tsx rename to packages/core/src/components/horizontal-gradient.tsx diff --git a/src/components/in-view-div.tsx b/packages/core/src/components/in-view-div.tsx similarity index 100% rename from src/components/in-view-div.tsx rename to packages/core/src/components/in-view-div.tsx diff --git a/src/components/json-ld.tsx b/packages/core/src/components/json-ld.tsx similarity index 100% rename from src/components/json-ld.tsx rename to packages/core/src/components/json-ld.tsx diff --git a/src/components/language-switcher.tsx b/packages/core/src/components/language-switcher.tsx similarity index 100% rename from src/components/language-switcher.tsx rename to packages/core/src/components/language-switcher.tsx diff --git a/src/components/locale-link.tsx b/packages/core/src/components/locale-link.tsx similarity index 100% rename from src/components/locale-link.tsx rename to packages/core/src/components/locale-link.tsx diff --git a/src/components/markdown-message.tsx b/packages/core/src/components/markdown-message.tsx similarity index 100% rename from src/components/markdown-message.tsx rename to packages/core/src/components/markdown-message.tsx diff --git a/src/components/mode-toggle.tsx b/packages/core/src/components/mode-toggle.tsx similarity index 100% rename from src/components/mode-toggle.tsx rename to packages/core/src/components/mode-toggle.tsx diff --git a/src/components/password.tsx b/packages/core/src/components/password.tsx similarity index 100% rename from src/components/password.tsx rename to packages/core/src/components/password.tsx diff --git a/src/components/share-button.tsx b/packages/core/src/components/share-button.tsx similarity index 100% rename from src/components/share-button.tsx rename to packages/core/src/components/share-button.tsx diff --git a/src/components/skeletons/first.tsx b/packages/core/src/components/skeletons/first.tsx similarity index 100% rename from src/components/skeletons/first.tsx rename to packages/core/src/components/skeletons/first.tsx diff --git a/src/components/skeletons/fourth.tsx b/packages/core/src/components/skeletons/fourth.tsx similarity index 100% rename from src/components/skeletons/fourth.tsx rename to packages/core/src/components/skeletons/fourth.tsx diff --git a/src/components/skeletons/second.tsx b/packages/core/src/components/skeletons/second.tsx similarity index 100% rename from src/components/skeletons/second.tsx rename to packages/core/src/components/skeletons/second.tsx diff --git a/src/components/skeletons/third.tsx b/packages/core/src/components/skeletons/third.tsx similarity index 100% rename from src/components/skeletons/third.tsx rename to packages/core/src/components/skeletons/third.tsx diff --git a/src/components/subheading.tsx b/packages/core/src/components/subheading.tsx similarity index 100% rename from src/components/subheading.tsx rename to packages/core/src/components/subheading.tsx diff --git a/src/components/switch.tsx b/packages/core/src/components/switch.tsx similarity index 100% rename from src/components/switch.tsx rename to packages/core/src/components/switch.tsx diff --git a/src/components/testimonial-column-container.tsx b/packages/core/src/components/testimonial-column-container.tsx similarity index 100% rename from src/components/testimonial-column-container.tsx rename to packages/core/src/components/testimonial-column-container.tsx diff --git a/src/components/testimonials.tsx b/packages/core/src/components/testimonials.tsx similarity index 100% rename from src/components/testimonials.tsx rename to packages/core/src/components/testimonials.tsx diff --git a/src/components/tool-card.tsx b/packages/core/src/components/tool-card.tsx similarity index 100% rename from src/components/tool-card.tsx rename to packages/core/src/components/tool-card.tsx diff --git a/src/components/tool-logo.tsx b/packages/core/src/components/tool-logo.tsx similarity index 100% rename from src/components/tool-logo.tsx rename to packages/core/src/components/tool-logo.tsx diff --git a/src/components/ui/animated-tooltip.tsx b/packages/core/src/components/ui/animated-tooltip.tsx similarity index 100% rename from src/components/ui/animated-tooltip.tsx rename to packages/core/src/components/ui/animated-tooltip.tsx diff --git a/src/components/ui/form.tsx b/packages/core/src/components/ui/form.tsx similarity index 100% rename from src/components/ui/form.tsx rename to packages/core/src/components/ui/form.tsx diff --git a/src/components/ui/infinite-moving-cards.tsx b/packages/core/src/components/ui/infinite-moving-cards.tsx similarity index 100% rename from src/components/ui/infinite-moving-cards.tsx rename to packages/core/src/components/ui/infinite-moving-cards.tsx diff --git a/src/components/ui/label.tsx b/packages/core/src/components/ui/label.tsx similarity index 100% rename from src/components/ui/label.tsx rename to packages/core/src/components/ui/label.tsx diff --git a/src/constants/website.ts b/packages/core/src/constants/website.ts similarity index 100% rename from src/constants/website.ts rename to packages/core/src/constants/website.ts diff --git a/src/app/[locale]/(marketing)/blog/ai-chatbots-for-business/en.mdx b/packages/core/src/content/blog/ai-chatbots-for-business/en.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-chatbots-for-business/en.mdx rename to packages/core/src/content/blog/ai-chatbots-for-business/en.mdx diff --git a/src/app/[locale]/(marketing)/blog/ai-chatbots-for-business/zh.mdx b/packages/core/src/content/blog/ai-chatbots-for-business/zh.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-chatbots-for-business/zh.mdx rename to packages/core/src/content/blog/ai-chatbots-for-business/zh.mdx diff --git a/src/app/[locale]/(marketing)/blog/ai-code-assistants-guide/en.mdx b/packages/core/src/content/blog/ai-code-assistants-guide/en.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-code-assistants-guide/en.mdx rename to packages/core/src/content/blog/ai-code-assistants-guide/en.mdx diff --git a/src/app/[locale]/(marketing)/blog/ai-code-assistants-guide/zh.mdx b/packages/core/src/content/blog/ai-code-assistants-guide/zh.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-code-assistants-guide/zh.mdx rename to packages/core/src/content/blog/ai-code-assistants-guide/zh.mdx diff --git a/src/app/[locale]/(marketing)/blog/ai-image-generators-compared/en.mdx b/packages/core/src/content/blog/ai-image-generators-compared/en.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-image-generators-compared/en.mdx rename to packages/core/src/content/blog/ai-image-generators-compared/en.mdx diff --git a/src/app/[locale]/(marketing)/blog/ai-image-generators-compared/zh.mdx b/packages/core/src/content/blog/ai-image-generators-compared/zh.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-image-generators-compared/zh.mdx rename to packages/core/src/content/blog/ai-image-generators-compared/zh.mdx diff --git a/src/app/[locale]/(marketing)/blog/ai-productivity-tools-2025/en.mdx b/packages/core/src/content/blog/ai-productivity-tools-2025/en.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-productivity-tools-2025/en.mdx rename to packages/core/src/content/blog/ai-productivity-tools-2025/en.mdx diff --git a/src/app/[locale]/(marketing)/blog/ai-productivity-tools-2025/zh.mdx b/packages/core/src/content/blog/ai-productivity-tools-2025/zh.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-productivity-tools-2025/zh.mdx rename to packages/core/src/content/blog/ai-productivity-tools-2025/zh.mdx diff --git a/src/app/[locale]/(marketing)/blog/ai-video-generation-tools/en.mdx b/packages/core/src/content/blog/ai-video-generation-tools/en.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-video-generation-tools/en.mdx rename to packages/core/src/content/blog/ai-video-generation-tools/en.mdx diff --git a/src/app/[locale]/(marketing)/blog/ai-video-generation-tools/zh.mdx b/packages/core/src/content/blog/ai-video-generation-tools/zh.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/ai-video-generation-tools/zh.mdx rename to packages/core/src/content/blog/ai-video-generation-tools/zh.mdx diff --git a/src/app/[locale]/(marketing)/blog/best-ai-tools-2025/en.mdx b/packages/core/src/content/blog/best-ai-tools-2025/en.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/best-ai-tools-2025/en.mdx rename to packages/core/src/content/blog/best-ai-tools-2025/en.mdx diff --git a/src/app/[locale]/(marketing)/blog/best-ai-tools-2025/zh.mdx b/packages/core/src/content/blog/best-ai-tools-2025/zh.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/best-ai-tools-2025/zh.mdx rename to packages/core/src/content/blog/best-ai-tools-2025/zh.mdx diff --git a/src/app/[locale]/(marketing)/blog/free-ai-tools-guide/en.mdx b/packages/core/src/content/blog/free-ai-tools-guide/en.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/free-ai-tools-guide/en.mdx rename to packages/core/src/content/blog/free-ai-tools-guide/en.mdx diff --git a/src/app/[locale]/(marketing)/blog/free-ai-tools-guide/zh.mdx b/packages/core/src/content/blog/free-ai-tools-guide/zh.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/free-ai-tools-guide/zh.mdx rename to packages/core/src/content/blog/free-ai-tools-guide/zh.mdx diff --git a/src/app/[locale]/(marketing)/blog/how-to-choose-ai-writing-tool/en.mdx b/packages/core/src/content/blog/how-to-choose-ai-writing-tool/en.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/how-to-choose-ai-writing-tool/en.mdx rename to packages/core/src/content/blog/how-to-choose-ai-writing-tool/en.mdx diff --git a/src/app/[locale]/(marketing)/blog/how-to-choose-ai-writing-tool/zh.mdx b/packages/core/src/content/blog/how-to-choose-ai-writing-tool/zh.mdx similarity index 100% rename from src/app/[locale]/(marketing)/blog/how-to-choose-ai-writing-tool/zh.mdx rename to packages/core/src/content/blog/how-to-choose-ai-writing-tool/zh.mdx diff --git a/src/context/theme-provider.tsx b/packages/core/src/context/theme-provider.tsx similarity index 100% rename from src/context/theme-provider.tsx rename to packages/core/src/context/theme-provider.tsx diff --git a/src/drizzle/0000_many_tomas.sql b/packages/core/src/drizzle/0000_many_tomas.sql similarity index 100% rename from src/drizzle/0000_many_tomas.sql rename to packages/core/src/drizzle/0000_many_tomas.sql diff --git a/src/drizzle/0001_lumpy_proudstar.sql b/packages/core/src/drizzle/0001_lumpy_proudstar.sql similarity index 100% rename from src/drizzle/0001_lumpy_proudstar.sql rename to packages/core/src/drizzle/0001_lumpy_proudstar.sql diff --git a/src/drizzle/0002_backfill_pricing_featured.sql b/packages/core/src/drizzle/0002_backfill_pricing_featured.sql similarity index 100% rename from src/drizzle/0002_backfill_pricing_featured.sql rename to packages/core/src/drizzle/0002_backfill_pricing_featured.sql diff --git a/src/drizzle/meta/0000_snapshot.json b/packages/core/src/drizzle/meta/0000_snapshot.json similarity index 100% rename from src/drizzle/meta/0000_snapshot.json rename to packages/core/src/drizzle/meta/0000_snapshot.json diff --git a/src/drizzle/meta/0001_snapshot.json b/packages/core/src/drizzle/meta/0001_snapshot.json similarity index 100% rename from src/drizzle/meta/0001_snapshot.json rename to packages/core/src/drizzle/meta/0001_snapshot.json diff --git a/src/drizzle/meta/0002_snapshot.json b/packages/core/src/drizzle/meta/0002_snapshot.json similarity index 100% rename from src/drizzle/meta/0002_snapshot.json rename to packages/core/src/drizzle/meta/0002_snapshot.json diff --git a/src/drizzle/meta/_journal.json b/packages/core/src/drizzle/meta/_journal.json similarity index 100% rename from src/drizzle/meta/_journal.json rename to packages/core/src/drizzle/meta/_journal.json diff --git a/src/emails/reset-password-email.tsx b/packages/core/src/emails/reset-password-email.tsx similarity index 100% rename from src/emails/reset-password-email.tsx rename to packages/core/src/emails/reset-password-email.tsx diff --git a/src/emails/verification-email.tsx b/packages/core/src/emails/verification-email.tsx similarity index 100% rename from src/emails/verification-email.tsx rename to packages/core/src/emails/verification-email.tsx diff --git a/src/features/admin/actions/user-actions.ts b/packages/core/src/features/admin/actions/user-actions.ts similarity index 100% rename from src/features/admin/actions/user-actions.ts rename to packages/core/src/features/admin/actions/user-actions.ts diff --git a/src/features/admin/components/admin-dashboard.tsx b/packages/core/src/features/admin/components/admin-dashboard.tsx similarity index 100% rename from src/features/admin/components/admin-dashboard.tsx rename to packages/core/src/features/admin/components/admin-dashboard.tsx diff --git a/src/features/admin/components/admin-header.tsx b/packages/core/src/features/admin/components/admin-header.tsx similarity index 100% rename from src/features/admin/components/admin-header.tsx rename to packages/core/src/features/admin/components/admin-header.tsx diff --git a/src/features/admin/components/admin-sidebar.tsx b/packages/core/src/features/admin/components/admin-sidebar.tsx similarity index 100% rename from src/features/admin/components/admin-sidebar.tsx rename to packages/core/src/features/admin/components/admin-sidebar.tsx diff --git a/src/features/admin/components/users-table.tsx b/packages/core/src/features/admin/components/users-table.tsx similarity index 100% rename from src/features/admin/components/users-table.tsx rename to packages/core/src/features/admin/components/users-table.tsx diff --git a/src/features/alternatives/components/views.tsx b/packages/core/src/features/alternatives/components/views.tsx similarity index 100% rename from src/features/alternatives/components/views.tsx rename to packages/core/src/features/alternatives/components/views.tsx diff --git a/src/features/auth/components/email-verified-guard.tsx b/packages/core/src/features/auth/components/email-verified-guard.tsx similarity index 100% rename from src/features/auth/components/email-verified-guard.tsx rename to packages/core/src/features/auth/components/email-verified-guard.tsx diff --git a/src/features/auth/components/index.ts b/packages/core/src/features/auth/components/index.ts similarity index 100% rename from src/features/auth/components/index.ts rename to packages/core/src/features/auth/components/index.ts diff --git a/src/features/auth/components/login-form.tsx b/packages/core/src/features/auth/components/login-form.tsx similarity index 100% rename from src/features/auth/components/login-form.tsx rename to packages/core/src/features/auth/components/login-form.tsx diff --git a/src/features/auth/components/session-guard.tsx b/packages/core/src/features/auth/components/session-guard.tsx similarity index 100% rename from src/features/auth/components/session-guard.tsx rename to packages/core/src/features/auth/components/session-guard.tsx diff --git a/src/features/auth/components/signup-form.tsx b/packages/core/src/features/auth/components/signup-form.tsx similarity index 100% rename from src/features/auth/components/signup-form.tsx rename to packages/core/src/features/auth/components/signup-form.tsx diff --git a/src/features/auth/components/social-auth-buttons.tsx b/packages/core/src/features/auth/components/social-auth-buttons.tsx similarity index 100% rename from src/features/auth/components/social-auth-buttons.tsx rename to packages/core/src/features/auth/components/social-auth-buttons.tsx diff --git a/src/features/auth/schemas.ts b/packages/core/src/features/auth/schemas.ts similarity index 100% rename from src/features/auth/schemas.ts rename to packages/core/src/features/auth/schemas.ts diff --git a/src/features/claim/actions.ts b/packages/core/src/features/claim/actions.ts similarity index 100% rename from src/features/claim/actions.ts rename to packages/core/src/features/claim/actions.ts diff --git a/src/features/claim/components/claim-button.tsx b/packages/core/src/features/claim/components/claim-button.tsx similarity index 100% rename from src/features/claim/components/claim-button.tsx rename to packages/core/src/features/claim/components/claim-button.tsx diff --git a/src/features/claim/components/claims-table.tsx b/packages/core/src/features/claim/components/claims-table.tsx similarity index 100% rename from src/features/claim/components/claims-table.tsx rename to packages/core/src/features/claim/components/claims-table.tsx diff --git a/src/features/discovery/actions.ts b/packages/core/src/features/discovery/actions.ts similarity index 100% rename from src/features/discovery/actions.ts rename to packages/core/src/features/discovery/actions.ts diff --git a/src/features/discovery/components/discovery-manager.tsx b/packages/core/src/features/discovery/components/discovery-manager.tsx similarity index 100% rename from src/features/discovery/components/discovery-manager.tsx rename to packages/core/src/features/discovery/components/discovery-manager.tsx diff --git a/src/features/discovery/localize.ts b/packages/core/src/features/discovery/localize.ts similarity index 100% rename from src/features/discovery/localize.ts rename to packages/core/src/features/discovery/localize.ts diff --git a/src/features/forms/components/auth-message-card.tsx b/packages/core/src/features/forms/components/auth-message-card.tsx similarity index 100% rename from src/features/forms/components/auth-message-card.tsx rename to packages/core/src/features/forms/components/auth-message-card.tsx diff --git a/src/features/forms/components/form-shell.tsx b/packages/core/src/features/forms/components/form-shell.tsx similarity index 100% rename from src/features/forms/components/form-shell.tsx rename to packages/core/src/features/forms/components/form-shell.tsx diff --git a/src/features/forms/components/form-text-field.tsx b/packages/core/src/features/forms/components/form-text-field.tsx similarity index 100% rename from src/features/forms/components/form-text-field.tsx rename to packages/core/src/features/forms/components/form-text-field.tsx diff --git a/src/features/forms/components/input.tsx b/packages/core/src/features/forms/components/input.tsx similarity index 100% rename from src/features/forms/components/input.tsx rename to packages/core/src/features/forms/components/input.tsx diff --git a/src/features/marketing/actions/contact-actions.ts b/packages/core/src/features/marketing/actions/contact-actions.ts similarity index 100% rename from src/features/marketing/actions/contact-actions.ts rename to packages/core/src/features/marketing/actions/contact-actions.ts diff --git a/src/features/marketing/actions/newsletter-actions.ts b/packages/core/src/features/marketing/actions/newsletter-actions.ts similarity index 100% rename from src/features/marketing/actions/newsletter-actions.ts rename to packages/core/src/features/marketing/actions/newsletter-actions.ts diff --git a/src/features/marketing/components/contact-form.tsx b/packages/core/src/features/marketing/components/contact-form.tsx similarity index 100% rename from src/features/marketing/components/contact-form.tsx rename to packages/core/src/features/marketing/components/contact-form.tsx diff --git a/src/features/marketing/components/index.ts b/packages/core/src/features/marketing/components/index.ts similarity index 100% rename from src/features/marketing/components/index.ts rename to packages/core/src/features/marketing/components/index.ts diff --git a/src/features/marketing/components/newsletter-form.tsx b/packages/core/src/features/marketing/components/newsletter-form.tsx similarity index 100% rename from src/features/marketing/components/newsletter-form.tsx rename to packages/core/src/features/marketing/components/newsletter-form.tsx diff --git a/src/features/marketing/schemas.ts b/packages/core/src/features/marketing/schemas.ts similarity index 100% rename from src/features/marketing/schemas.ts rename to packages/core/src/features/marketing/schemas.ts diff --git a/src/features/navigation/components/desktop-navbar.tsx b/packages/core/src/features/navigation/components/desktop-navbar.tsx similarity index 100% rename from src/features/navigation/components/desktop-navbar.tsx rename to packages/core/src/features/navigation/components/desktop-navbar.tsx diff --git a/src/features/navigation/components/mobile-navbar.tsx b/packages/core/src/features/navigation/components/mobile-navbar.tsx similarity index 100% rename from src/features/navigation/components/mobile-navbar.tsx rename to packages/core/src/features/navigation/components/mobile-navbar.tsx diff --git a/src/features/navigation/components/navbar-item.tsx b/packages/core/src/features/navigation/components/navbar-item.tsx similarity index 100% rename from src/features/navigation/components/navbar-item.tsx rename to packages/core/src/features/navigation/components/navbar-item.tsx diff --git a/src/features/navigation/components/navbar.tsx b/packages/core/src/features/navigation/components/navbar.tsx similarity index 100% rename from src/features/navigation/components/navbar.tsx rename to packages/core/src/features/navigation/components/navbar.tsx diff --git a/src/features/navigation/components/user-menu.tsx b/packages/core/src/features/navigation/components/user-menu.tsx similarity index 100% rename from src/features/navigation/components/user-menu.tsx rename to packages/core/src/features/navigation/components/user-menu.tsx diff --git a/src/features/navigation/config.ts b/packages/core/src/features/navigation/config.ts similarity index 100% rename from src/features/navigation/config.ts rename to packages/core/src/features/navigation/config.ts diff --git a/src/features/reviews/actions.ts b/packages/core/src/features/reviews/actions.ts similarity index 100% rename from src/features/reviews/actions.ts rename to packages/core/src/features/reviews/actions.ts diff --git a/src/features/reviews/components/reviews-admin-table.tsx b/packages/core/src/features/reviews/components/reviews-admin-table.tsx similarity index 100% rename from src/features/reviews/components/reviews-admin-table.tsx rename to packages/core/src/features/reviews/components/reviews-admin-table.tsx diff --git a/src/features/reviews/components/reviews-section.tsx b/packages/core/src/features/reviews/components/reviews-section.tsx similarity index 100% rename from src/features/reviews/components/reviews-section.tsx rename to packages/core/src/features/reviews/components/reviews-section.tsx diff --git a/src/features/reviews/components/star-rating.tsx b/packages/core/src/features/reviews/components/star-rating.tsx similarity index 100% rename from src/features/reviews/components/star-rating.tsx rename to packages/core/src/features/reviews/components/star-rating.tsx diff --git a/src/features/submission/actions.ts b/packages/core/src/features/submission/actions.ts similarity index 100% rename from src/features/submission/actions.ts rename to packages/core/src/features/submission/actions.ts diff --git a/src/features/submission/components/submissions-table.tsx b/packages/core/src/features/submission/components/submissions-table.tsx similarity index 100% rename from src/features/submission/components/submissions-table.tsx rename to packages/core/src/features/submission/components/submissions-table.tsx diff --git a/src/features/submission/components/submit-tool-form.tsx b/packages/core/src/features/submission/components/submit-tool-form.tsx similarity index 100% rename from src/features/submission/components/submit-tool-form.tsx rename to packages/core/src/features/submission/components/submit-tool-form.tsx diff --git a/src/features/tools/actions/category-actions.ts b/packages/core/src/features/tools/actions/category-actions.ts similarity index 100% rename from src/features/tools/actions/category-actions.ts rename to packages/core/src/features/tools/actions/category-actions.ts diff --git a/src/features/tools/actions/favorite-actions.ts b/packages/core/src/features/tools/actions/favorite-actions.ts similarity index 100% rename from src/features/tools/actions/favorite-actions.ts rename to packages/core/src/features/tools/actions/favorite-actions.ts diff --git a/src/features/tools/actions/index.ts b/packages/core/src/features/tools/actions/index.ts similarity index 100% rename from src/features/tools/actions/index.ts rename to packages/core/src/features/tools/actions/index.ts diff --git a/src/features/tools/actions/tag-actions.ts b/packages/core/src/features/tools/actions/tag-actions.ts similarity index 100% rename from src/features/tools/actions/tag-actions.ts rename to packages/core/src/features/tools/actions/tag-actions.ts diff --git a/src/features/tools/actions/tool-actions.ts b/packages/core/src/features/tools/actions/tool-actions.ts similarity index 100% rename from src/features/tools/actions/tool-actions.ts rename to packages/core/src/features/tools/actions/tool-actions.ts diff --git a/src/features/tools/components/categories-table.tsx b/packages/core/src/features/tools/components/categories-table.tsx similarity index 100% rename from src/features/tools/components/categories-table.tsx rename to packages/core/src/features/tools/components/categories-table.tsx diff --git a/src/features/tools/components/favorite-button.tsx b/packages/core/src/features/tools/components/favorite-button.tsx similarity index 100% rename from src/features/tools/components/favorite-button.tsx rename to packages/core/src/features/tools/components/favorite-button.tsx diff --git a/src/features/tools/components/favorite-tools-section.tsx b/packages/core/src/features/tools/components/favorite-tools-section.tsx similarity index 100% rename from src/features/tools/components/favorite-tools-section.tsx rename to packages/core/src/features/tools/components/favorite-tools-section.tsx diff --git a/src/features/tools/components/tags-table.tsx b/packages/core/src/features/tools/components/tags-table.tsx similarity index 100% rename from src/features/tools/components/tags-table.tsx rename to packages/core/src/features/tools/components/tags-table.tsx diff --git a/src/features/tools/components/tool-form-modal.tsx b/packages/core/src/features/tools/components/tool-form-modal.tsx similarity index 100% rename from src/features/tools/components/tool-form-modal.tsx rename to packages/core/src/features/tools/components/tool-form-modal.tsx diff --git a/src/features/tools/components/tools-list.tsx b/packages/core/src/features/tools/components/tools-list.tsx similarity index 100% rename from src/features/tools/components/tools-list.tsx rename to packages/core/src/features/tools/components/tools-list.tsx diff --git a/src/features/tools/components/tools-table.tsx b/packages/core/src/features/tools/components/tools-table.tsx similarity index 100% rename from src/features/tools/components/tools-table.tsx rename to packages/core/src/features/tools/components/tools-table.tsx diff --git a/src/features/voting/actions.ts b/packages/core/src/features/voting/actions.ts similarity index 100% rename from src/features/voting/actions.ts rename to packages/core/src/features/voting/actions.ts diff --git a/src/features/voting/components/vote-button.tsx b/packages/core/src/features/voting/components/vote-button.tsx similarity index 100% rename from src/features/voting/components/vote-button.tsx rename to packages/core/src/features/voting/components/vote-button.tsx diff --git a/src/i18n.config.ts b/packages/core/src/i18n.config.ts similarity index 100% rename from src/i18n.config.ts rename to packages/core/src/i18n.config.ts diff --git a/src/i18n/routing.ts b/packages/core/src/i18n/routing.ts similarity index 100% rename from src/i18n/routing.ts rename to packages/core/src/i18n/routing.ts diff --git a/packages/core/src/kit/chrome.tsx b/packages/core/src/kit/chrome.tsx new file mode 100644 index 0000000..3b2338e --- /dev/null +++ b/packages/core/src/kit/chrome.tsx @@ -0,0 +1,29 @@ +import { ThemeHeader } from "./theme-header"; +import { ThemeFooter } from "./theme-footer"; +import type { SiteConfig } from "./types"; + +/** + * # 组件 SiteChrome + * 说明:站点外壳(Header + Footer + 主题变量注入)。 + * 由每个网站的 marketing layout 通过 createMarketingLayout(config) 调用。 + * 一个 SiteConfig = 一个独立网站;Core 不内置任何站点。 + */ +export function SiteChrome({ + config, + children, +}: { + config: SiteConfig; + children: React.ReactNode; +}) { + return ( +
+ + {children} + +
+ ); +} diff --git a/packages/core/src/kit/create-home.tsx b/packages/core/src/kit/create-home.tsx new file mode 100644 index 0000000..e0dc0b9 --- /dev/null +++ b/packages/core/src/kit/create-home.tsx @@ -0,0 +1,57 @@ +import { setRequestLocale } from "next-intl/server"; +import { WebSiteJsonLd, OrganizationJsonLd } from "@/components/json-ld"; +import type { SiteConfig } from "./types"; + +/** + * # 函数 createHomePage + * 说明:站点首页工厂。传入站点配置与站点首页组件(sites//src/site/home.tsx), + * 返回带 SEO 结构化数据的首页 Page 组件。 + */ +export function createHomePage( + config: SiteConfig, + SiteHome: React.ComponentType<{ locale: string }> +) { + return async function SiteHomePage({ + params, + }: { + params: Promise<{ locale: string }>; + }) { + const { locale } = await params; + setRequestLocale(locale); + const baseUrl = + process.env.NEXT_PUBLIC_APP_URL || `http://localhost:${config.port}`; + + return ( +
+ + + +
+ ); + }; +} + +/** + * # 函数 createHomeMetadata + * 说明:站点首页 metadata 工厂(品牌文案驱动,品牌站为 en-first)。 + */ +export function createHomeMetadata(config: SiteConfig) { + return async function generateMetadata() { + const { generatePageMetadata } = await import("@/lib/metadata"); + return generatePageMetadata({ + locale: "en", + path: "", + title: `${config.brand.name} — ${config.brand.headline}`, + description: config.brand.subheadline || config.brand.tagline, + }); + }; +} diff --git a/packages/core/src/kit/create-marketing-layout.tsx b/packages/core/src/kit/create-marketing-layout.tsx new file mode 100644 index 0000000..2273762 --- /dev/null +++ b/packages/core/src/kit/create-marketing-layout.tsx @@ -0,0 +1,21 @@ +import type { SiteConfig } from "./types"; +import { SiteChrome } from "./chrome"; + +/** + * # 函数 createMarketingLayout + * 说明:站点营销布局工厂。每个网站用自己的 SiteConfig 调用一次, + * 得到独立的布局组件 —— Core 不感知任何具体站点。 + */ +export function createMarketingLayout(config: SiteConfig) { + return function MarketingLayout({ + children, + }: { + children: React.ReactNode; + }) { + return ( +
+ {children} +
+ ); + }; +} diff --git a/src/themes/shared/home-data.ts b/packages/core/src/kit/home-data.ts similarity index 100% rename from src/themes/shared/home-data.ts rename to packages/core/src/kit/home-data.ts diff --git a/src/themes/shared/section.tsx b/packages/core/src/kit/section.tsx similarity index 100% rename from src/themes/shared/section.tsx rename to packages/core/src/kit/section.tsx diff --git a/src/themes/chrome.tsx b/packages/core/src/kit/site-themes/chrome-configs.tsx similarity index 100% rename from src/themes/chrome.tsx rename to packages/core/src/kit/site-themes/chrome-configs.tsx diff --git a/src/themes/classic/index.tsx b/packages/core/src/kit/site-themes/classic/index.tsx similarity index 100% rename from src/themes/classic/index.tsx rename to packages/core/src/kit/site-themes/classic/index.tsx diff --git a/src/themes/editorial/index.tsx b/packages/core/src/kit/site-themes/editorial/index.tsx similarity index 100% rename from src/themes/editorial/index.tsx rename to packages/core/src/kit/site-themes/editorial/index.tsx diff --git a/src/themes/minimal/index.tsx b/packages/core/src/kit/site-themes/minimal/index.tsx similarity index 100% rename from src/themes/minimal/index.tsx rename to packages/core/src/kit/site-themes/minimal/index.tsx diff --git a/src/themes/niche/index.tsx b/packages/core/src/kit/site-themes/niche/index.tsx similarity index 100% rename from src/themes/niche/index.tsx rename to packages/core/src/kit/site-themes/niche/index.tsx diff --git a/src/themes/product/index.tsx b/packages/core/src/kit/site-themes/product/index.tsx similarity index 100% rename from src/themes/product/index.tsx rename to packages/core/src/kit/site-themes/product/index.tsx diff --git a/src/themes/shared/theme-footer.tsx b/packages/core/src/kit/theme-footer.tsx similarity index 98% rename from src/themes/shared/theme-footer.tsx rename to packages/core/src/kit/theme-footer.tsx index 2ab318d..e9b81e0 100644 --- a/src/themes/shared/theme-footer.tsx +++ b/packages/core/src/kit/theme-footer.tsx @@ -2,7 +2,7 @@ import { LocaleLink } from "@/components/locale-link"; import { NewsletterForm } from "@/features/marketing/components/newsletter-form"; -import type { ThemeBrand } from "../types"; +import type { ThemeBrand } from "./types"; export interface ThemeFooterProps { brand: ThemeBrand; diff --git a/src/themes/shared/theme-header.tsx b/packages/core/src/kit/theme-header.tsx similarity index 99% rename from src/themes/shared/theme-header.tsx rename to packages/core/src/kit/theme-header.tsx index 23e2d0e..1b5eb81 100644 --- a/src/themes/shared/theme-header.tsx +++ b/packages/core/src/kit/theme-header.tsx @@ -9,7 +9,7 @@ import { UserMenu } from "@/features/navigation/components/user-menu"; import { useRouter, usePathname } from "next/navigation"; import { useLocale } from "next-intl"; import { cn } from "@/lib/utils"; -import type { ThemeBrand } from "../types"; +import type { ThemeBrand } from "./types"; export interface ThemeHeaderProps { brand: ThemeBrand; diff --git a/packages/core/src/kit/types.ts b/packages/core/src/kit/types.ts new file mode 100644 index 0000000..f53f887 --- /dev/null +++ b/packages/core/src/kit/types.ts @@ -0,0 +1,35 @@ +import type { ComponentType } from "react"; + +/** 站点品牌配置 */ +export interface ThemeBrand { + name: string; + /** 导航/页脚用的短标语 */ + tagline: string; + /** 首页主标题(hero headline) */ + headline: string; + /** 首页副标题 */ + subheadline: string; +} + +/** + * # SiteConfig + * 说明:一个"网站"的全部配置 —— 每个站点应用在自己的 brand.tsx 里定义一份。 + * Core 与 Site 分离(设计文档 §75 原则 1):新增站点无需修改 Core。 + */ +export interface SiteConfig { + /** 站点标识(仅用于日志/文档) */ + id: string; + brand: ThemeBrand; + /** 导航项(href 不带 locale 前缀) */ + navItems: { label: string; href: string }[]; + /** 页脚分组链接 */ + footerGroups: { title: string; links: { label: string; href: string }[] }[]; + /** Header 搜索框占位文本 */ + searchPlaceholder: string; + /** 本站默认端口(开发/演示) */ + port: number; + /** 站点 SEO 文案覆盖(en/zh) */ + seo?: Record; + /** 主题级 CSS 变量覆盖(HSL 三元组,可选) */ + cssVars?: Record; +} diff --git a/src/layouts/auth-layout.tsx b/packages/core/src/layouts/auth-layout.tsx similarity index 100% rename from src/layouts/auth-layout.tsx rename to packages/core/src/layouts/auth-layout.tsx diff --git a/src/lib/analytics/record.ts b/packages/core/src/lib/analytics/record.ts similarity index 100% rename from src/lib/analytics/record.ts rename to packages/core/src/lib/analytics/record.ts diff --git a/src/lib/auth-client.ts b/packages/core/src/lib/auth-client.ts similarity index 100% rename from src/lib/auth-client.ts rename to packages/core/src/lib/auth-client.ts diff --git a/src/lib/auth.ts b/packages/core/src/lib/auth.ts similarity index 100% rename from src/lib/auth.ts rename to packages/core/src/lib/auth.ts diff --git a/src/lib/auth/admin.ts b/packages/core/src/lib/auth/admin.ts similarity index 100% rename from src/lib/auth/admin.ts rename to packages/core/src/lib/auth/admin.ts diff --git a/packages/core/src/lib/blog-manifest.generated.ts b/packages/core/src/lib/blog-manifest.generated.ts new file mode 100644 index 0000000..07b07ff --- /dev/null +++ b/packages/core/src/lib/blog-manifest.generated.ts @@ -0,0 +1,37 @@ +// This file is auto-generated by scripts/generate-blog-manifest.mjs +// Do not edit manually. + +export const blogModuleLoaders = { + "ai-chatbots-for-business": { + "en": () => import("../content/blog/ai-chatbots-for-business/en.mdx"), + "zh": () => import("../content/blog/ai-chatbots-for-business/zh.mdx"), + }, + "ai-code-assistants-guide": { + "en": () => import("../content/blog/ai-code-assistants-guide/en.mdx"), + "zh": () => import("../content/blog/ai-code-assistants-guide/zh.mdx"), + }, + "ai-image-generators-compared": { + "en": () => import("../content/blog/ai-image-generators-compared/en.mdx"), + "zh": () => import("../content/blog/ai-image-generators-compared/zh.mdx"), + }, + "ai-productivity-tools-2025": { + "en": () => import("../content/blog/ai-productivity-tools-2025/en.mdx"), + "zh": () => import("../content/blog/ai-productivity-tools-2025/zh.mdx"), + }, + "ai-video-generation-tools": { + "en": () => import("../content/blog/ai-video-generation-tools/en.mdx"), + "zh": () => import("../content/blog/ai-video-generation-tools/zh.mdx"), + }, + "best-ai-tools-2025": { + "en": () => import("../content/blog/best-ai-tools-2025/en.mdx"), + "zh": () => import("../content/blog/best-ai-tools-2025/zh.mdx"), + }, + "free-ai-tools-guide": { + "en": () => import("../content/blog/free-ai-tools-guide/en.mdx"), + "zh": () => import("../content/blog/free-ai-tools-guide/zh.mdx"), + }, + "how-to-choose-ai-writing-tool": { + "en": () => import("../content/blog/how-to-choose-ai-writing-tool/en.mdx"), + "zh": () => import("../content/blog/how-to-choose-ai-writing-tool/zh.mdx"), + }, +} as const; diff --git a/src/lib/blog.ts b/packages/core/src/lib/blog.ts similarity index 100% rename from src/lib/blog.ts rename to packages/core/src/lib/blog.ts diff --git a/src/lib/db/index.ts b/packages/core/src/lib/db/index.ts similarity index 100% rename from src/lib/db/index.ts rename to packages/core/src/lib/db/index.ts diff --git a/src/lib/db/schema.ts b/packages/core/src/lib/db/schema.ts similarity index 100% rename from src/lib/db/schema.ts rename to packages/core/src/lib/db/schema.ts diff --git a/src/lib/db/schema/analytics.ts b/packages/core/src/lib/db/schema/analytics.ts similarity index 100% rename from src/lib/db/schema/analytics.ts rename to packages/core/src/lib/db/schema/analytics.ts diff --git a/src/lib/db/schema/auth.ts b/packages/core/src/lib/db/schema/auth.ts similarity index 100% rename from src/lib/db/schema/auth.ts rename to packages/core/src/lib/db/schema/auth.ts diff --git a/src/lib/db/schema/community.ts b/packages/core/src/lib/db/schema/community.ts similarity index 100% rename from src/lib/db/schema/community.ts rename to packages/core/src/lib/db/schema/community.ts diff --git a/src/lib/db/schema/discovery.ts b/packages/core/src/lib/db/schema/discovery.ts similarity index 100% rename from src/lib/db/schema/discovery.ts rename to packages/core/src/lib/db/schema/discovery.ts diff --git a/src/lib/db/schema/marketing.ts b/packages/core/src/lib/db/schema/marketing.ts similarity index 100% rename from src/lib/db/schema/marketing.ts rename to packages/core/src/lib/db/schema/marketing.ts diff --git a/src/lib/db/schema/tool.ts b/packages/core/src/lib/db/schema/tool.ts similarity index 100% rename from src/lib/db/schema/tool.ts rename to packages/core/src/lib/db/schema/tool.ts diff --git a/src/lib/email.ts b/packages/core/src/lib/email.ts similarity index 100% rename from src/lib/email.ts rename to packages/core/src/lib/email.ts diff --git a/src/lib/i18n.ts b/packages/core/src/lib/i18n.ts similarity index 100% rename from src/lib/i18n.ts rename to packages/core/src/lib/i18n.ts diff --git a/src/lib/metadata.ts b/packages/core/src/lib/metadata.ts similarity index 100% rename from src/lib/metadata.ts rename to packages/core/src/lib/metadata.ts diff --git a/src/lib/newsletter.ts b/packages/core/src/lib/newsletter.ts similarity index 100% rename from src/lib/newsletter.ts rename to packages/core/src/lib/newsletter.ts diff --git a/src/lib/r2-storage.ts b/packages/core/src/lib/r2-storage.ts similarity index 100% rename from src/lib/r2-storage.ts rename to packages/core/src/lib/r2-storage.ts diff --git a/src/lib/ranking/boards.ts b/packages/core/src/lib/ranking/boards.ts similarity index 100% rename from src/lib/ranking/boards.ts rename to packages/core/src/lib/ranking/boards.ts diff --git a/src/lib/ranking/queries.ts b/packages/core/src/lib/ranking/queries.ts similarity index 100% rename from src/lib/ranking/queries.ts rename to packages/core/src/lib/ranking/queries.ts diff --git a/src/lib/ranking/score.ts b/packages/core/src/lib/ranking/score.ts similarity index 100% rename from src/lib/ranking/score.ts rename to packages/core/src/lib/ranking/score.ts diff --git a/src/lib/seo/page-generator.ts b/packages/core/src/lib/seo/page-generator.ts similarity index 100% rename from src/lib/seo/page-generator.ts rename to packages/core/src/lib/seo/page-generator.ts diff --git a/src/lib/tools/duplicate.ts b/packages/core/src/lib/tools/duplicate.ts similarity index 100% rename from src/lib/tools/duplicate.ts rename to packages/core/src/lib/tools/duplicate.ts diff --git a/src/lib/utils.ts b/packages/core/src/lib/utils.ts similarity index 100% rename from src/lib/utils.ts rename to packages/core/src/lib/utils.ts diff --git a/mdx-components.tsx b/packages/core/src/mdx-components.tsx similarity index 100% rename from mdx-components.tsx rename to packages/core/src/mdx-components.tsx diff --git a/src/app/[locale]/(admin)/admin/analytics/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/analytics/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/analytics/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/analytics/page.tsx diff --git a/src/app/[locale]/(admin)/admin/categories/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/categories/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/categories/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/categories/page.tsx diff --git a/src/app/[locale]/(admin)/admin/claims/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/claims/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/claims/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/claims/page.tsx diff --git a/src/app/[locale]/(admin)/admin/discovery/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/discovery/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/discovery/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/discovery/page.tsx diff --git a/src/app/[locale]/(admin)/admin/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/page.tsx diff --git a/src/app/[locale]/(admin)/admin/reviews/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/reviews/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/reviews/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/reviews/page.tsx diff --git a/src/app/[locale]/(admin)/admin/submissions/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/submissions/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/submissions/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/submissions/page.tsx diff --git a/src/app/[locale]/(admin)/admin/tags/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/tags/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/tags/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/tags/page.tsx diff --git a/src/app/[locale]/(admin)/admin/tools/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/tools/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/tools/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/tools/page.tsx diff --git a/src/app/[locale]/(admin)/admin/users/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/users/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/users/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/users/page.tsx diff --git a/src/app/[locale]/(admin)/admin/votes/page.tsx b/packages/core/src/pages/[locale]/(admin)/admin/votes/page.tsx similarity index 100% rename from src/app/[locale]/(admin)/admin/votes/page.tsx rename to packages/core/src/pages/[locale]/(admin)/admin/votes/page.tsx diff --git a/src/app/[locale]/(admin)/layout.tsx b/packages/core/src/pages/[locale]/(admin)/layout.tsx similarity index 100% rename from src/app/[locale]/(admin)/layout.tsx rename to packages/core/src/pages/[locale]/(admin)/layout.tsx diff --git a/src/app/[locale]/(auth)/forgot-password/page.tsx b/packages/core/src/pages/[locale]/(auth)/forgot-password/page.tsx similarity index 100% rename from src/app/[locale]/(auth)/forgot-password/page.tsx rename to packages/core/src/pages/[locale]/(auth)/forgot-password/page.tsx diff --git a/src/app/[locale]/(auth)/layout.tsx b/packages/core/src/pages/[locale]/(auth)/layout.tsx similarity index 100% rename from src/app/[locale]/(auth)/layout.tsx rename to packages/core/src/pages/[locale]/(auth)/layout.tsx diff --git a/src/app/[locale]/(auth)/login/page.tsx b/packages/core/src/pages/[locale]/(auth)/login/page.tsx similarity index 100% rename from src/app/[locale]/(auth)/login/page.tsx rename to packages/core/src/pages/[locale]/(auth)/login/page.tsx diff --git a/src/app/[locale]/(auth)/reset-password/page.tsx b/packages/core/src/pages/[locale]/(auth)/reset-password/page.tsx similarity index 100% rename from src/app/[locale]/(auth)/reset-password/page.tsx rename to packages/core/src/pages/[locale]/(auth)/reset-password/page.tsx diff --git a/src/app/[locale]/(auth)/signup/page.tsx b/packages/core/src/pages/[locale]/(auth)/signup/page.tsx similarity index 100% rename from src/app/[locale]/(auth)/signup/page.tsx rename to packages/core/src/pages/[locale]/(auth)/signup/page.tsx diff --git a/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx b/packages/core/src/pages/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx diff --git a/src/app/[locale]/(marketing)/ai-tools-for/page.tsx b/packages/core/src/pages/[locale]/(marketing)/ai-tools-for/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/ai-tools-for/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/ai-tools-for/page.tsx diff --git a/src/app/[locale]/(marketing)/best/[slug]/page.tsx b/packages/core/src/pages/[locale]/(marketing)/best/[slug]/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/best/[slug]/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/best/[slug]/page.tsx diff --git a/src/app/[locale]/(marketing)/best/page.tsx b/packages/core/src/pages/[locale]/(marketing)/best/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/best/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/best/page.tsx diff --git a/src/app/[locale]/(marketing)/blog/[slug]/page.tsx b/packages/core/src/pages/[locale]/(marketing)/blog/[slug]/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/blog/[slug]/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/blog/[slug]/page.tsx diff --git a/src/app/[locale]/(marketing)/blog/page.tsx b/packages/core/src/pages/[locale]/(marketing)/blog/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/blog/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/blog/page.tsx diff --git a/src/app/[locale]/(marketing)/category/[slug]/page.tsx b/packages/core/src/pages/[locale]/(marketing)/category/[slug]/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/category/[slug]/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/category/[slug]/page.tsx diff --git a/src/app/[locale]/(marketing)/contact/page.tsx b/packages/core/src/pages/[locale]/(marketing)/contact/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/contact/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/contact/page.tsx diff --git a/src/app/[locale]/(marketing)/cookies/page.tsx b/packages/core/src/pages/[locale]/(marketing)/cookies/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/cookies/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/cookies/page.tsx diff --git a/src/app/[locale]/(marketing)/privacy/page.tsx b/packages/core/src/pages/[locale]/(marketing)/privacy/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/privacy/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/privacy/page.tsx diff --git a/src/app/[locale]/(marketing)/rankings/page.tsx b/packages/core/src/pages/[locale]/(marketing)/rankings/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/rankings/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/rankings/page.tsx diff --git a/src/app/[locale]/(marketing)/submit/page.tsx b/packages/core/src/pages/[locale]/(marketing)/submit/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/submit/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/submit/page.tsx diff --git a/src/app/[locale]/(marketing)/terms/page.tsx b/packages/core/src/pages/[locale]/(marketing)/terms/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/terms/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/terms/page.tsx diff --git a/src/app/[locale]/(marketing)/tools/[slug]/page.tsx b/packages/core/src/pages/[locale]/(marketing)/tools/[slug]/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/tools/[slug]/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/tools/[slug]/page.tsx diff --git a/src/app/[locale]/(marketing)/tools/page.tsx b/packages/core/src/pages/[locale]/(marketing)/tools/page.tsx similarity index 100% rename from src/app/[locale]/(marketing)/tools/page.tsx rename to packages/core/src/pages/[locale]/(marketing)/tools/page.tsx diff --git a/src/app/[locale]/(protected)/dashboard/page.tsx b/packages/core/src/pages/[locale]/(protected)/dashboard/page.tsx similarity index 100% rename from src/app/[locale]/(protected)/dashboard/page.tsx rename to packages/core/src/pages/[locale]/(protected)/dashboard/page.tsx diff --git a/src/app/[locale]/(protected)/layout.tsx b/packages/core/src/pages/[locale]/(protected)/layout.tsx similarity index 100% rename from src/app/[locale]/(protected)/layout.tsx rename to packages/core/src/pages/[locale]/(protected)/layout.tsx diff --git a/src/app/[locale]/(protected)/profile/page.tsx b/packages/core/src/pages/[locale]/(protected)/profile/page.tsx similarity index 100% rename from src/app/[locale]/(protected)/profile/page.tsx rename to packages/core/src/pages/[locale]/(protected)/profile/page.tsx diff --git a/src/app/[locale]/check-email/page.tsx b/packages/core/src/pages/[locale]/check-email/page.tsx similarity index 100% rename from src/app/[locale]/check-email/page.tsx rename to packages/core/src/pages/[locale]/check-email/page.tsx diff --git a/src/app/[locale]/layout.tsx b/packages/core/src/pages/[locale]/layout.tsx similarity index 98% rename from src/app/[locale]/layout.tsx rename to packages/core/src/pages/[locale]/layout.tsx index 3ca8631..53b7484 100644 --- a/src/app/[locale]/layout.tsx +++ b/packages/core/src/pages/[locale]/layout.tsx @@ -8,7 +8,6 @@ import { ViewTransitions } from "next-view-transitions"; import { ThemeProvider } from "@/context/theme-provider"; import { Toaster } from "sonner"; import Analytics from "@/analytics/analytics"; -import "../globals.css"; export function generateStaticParams() { return locales.map((locale) => ({ locale })); diff --git a/src/app/[locale]/verify-email/page.tsx b/packages/core/src/pages/[locale]/verify-email/page.tsx similarity index 100% rename from src/app/[locale]/verify-email/page.tsx rename to packages/core/src/pages/[locale]/verify-email/page.tsx diff --git a/src/app/api/auth/[...all]/route.ts b/packages/core/src/pages/api/auth/[...all]/route.ts similarity index 100% rename from src/app/api/auth/[...all]/route.ts rename to packages/core/src/pages/api/auth/[...all]/route.ts diff --git a/src/app/api/auth/forgot-password/route.ts b/packages/core/src/pages/api/auth/forgot-password/route.ts similarity index 100% rename from src/app/api/auth/forgot-password/route.ts rename to packages/core/src/pages/api/auth/forgot-password/route.ts diff --git a/src/app/api/auth/resend-verification/route.ts b/packages/core/src/pages/api/auth/resend-verification/route.ts similarity index 100% rename from src/app/api/auth/resend-verification/route.ts rename to packages/core/src/pages/api/auth/resend-verification/route.ts diff --git a/src/app/api/auth/reset-password/route.ts b/packages/core/src/pages/api/auth/reset-password/route.ts similarity index 100% rename from src/app/api/auth/reset-password/route.ts rename to packages/core/src/pages/api/auth/reset-password/route.ts diff --git a/src/app/api/auth/verify-email/route.ts b/packages/core/src/pages/api/auth/verify-email/route.ts similarity index 100% rename from src/app/api/auth/verify-email/route.ts rename to packages/core/src/pages/api/auth/verify-email/route.ts diff --git a/src/app/api/auth/verify-reset-token/route.ts b/packages/core/src/pages/api/auth/verify-reset-token/route.ts similarity index 100% rename from src/app/api/auth/verify-reset-token/route.ts rename to packages/core/src/pages/api/auth/verify-reset-token/route.ts diff --git a/src/app/api/newsletter/unsubscribe/route.ts b/packages/core/src/pages/api/newsletter/unsubscribe/route.ts similarity index 100% rename from src/app/api/newsletter/unsubscribe/route.ts rename to packages/core/src/pages/api/newsletter/unsubscribe/route.ts diff --git a/src/app/api/outbound/route.ts b/packages/core/src/pages/api/outbound/route.ts similarity index 100% rename from src/app/api/outbound/route.ts rename to packages/core/src/pages/api/outbound/route.ts diff --git a/src/app/api/search/route.ts b/packages/core/src/pages/api/search/route.ts similarity index 100% rename from src/app/api/search/route.ts rename to packages/core/src/pages/api/search/route.ts diff --git a/src/app/api/tools/[id]/vote/route.ts b/packages/core/src/pages/api/tools/[id]/vote/route.ts similarity index 100% rename from src/app/api/tools/[id]/vote/route.ts rename to packages/core/src/pages/api/tools/[id]/vote/route.ts diff --git a/src/app/api/upload/image/route.ts b/packages/core/src/pages/api/upload/image/route.ts similarity index 100% rename from src/app/api/upload/image/route.ts rename to packages/core/src/pages/api/upload/image/route.ts diff --git a/src/app/api/upload/simple/route.ts b/packages/core/src/pages/api/upload/simple/route.ts similarity index 100% rename from src/app/api/upload/simple/route.ts rename to packages/core/src/pages/api/upload/simple/route.ts diff --git a/src/app/api/user/admin-status/route.ts b/packages/core/src/pages/api/user/admin-status/route.ts similarity index 100% rename from src/app/api/user/admin-status/route.ts rename to packages/core/src/pages/api/user/admin-status/route.ts diff --git a/src/app/api/user/profile/route.ts b/packages/core/src/pages/api/user/profile/route.ts similarity index 100% rename from src/app/api/user/profile/route.ts rename to packages/core/src/pages/api/user/profile/route.ts diff --git a/src/app/layout.tsx b/packages/core/src/pages/app-layout.tsx similarity index 82% rename from src/app/layout.tsx rename to packages/core/src/pages/app-layout.tsx index 84ff0ca..9b85b71 100644 --- a/src/app/layout.tsx +++ b/packages/core/src/pages/app-layout.tsx @@ -1,4 +1,3 @@ -import "./globals.css"; export default function RootLayout({ children, diff --git a/src/app/manifest.ts b/packages/core/src/pages/manifest.ts similarity index 100% rename from src/app/manifest.ts rename to packages/core/src/pages/manifest.ts diff --git a/src/app/not-found.tsx b/packages/core/src/pages/not-found.tsx similarity index 100% rename from src/app/not-found.tsx rename to packages/core/src/pages/not-found.tsx diff --git a/src/app/sitemap.ts b/packages/core/src/pages/sitemap.ts similarity index 100% rename from src/app/sitemap.ts rename to packages/core/src/pages/sitemap.ts diff --git a/src/proxy.ts b/packages/core/src/proxy.ts similarity index 100% rename from src/proxy.ts rename to packages/core/src/proxy.ts diff --git a/src/app/globals.css b/packages/core/src/styles/globals.css similarity index 100% rename from src/app/globals.css rename to packages/core/src/styles/globals.css diff --git a/src/app/prism.css b/packages/core/src/styles/prism.css similarity index 100% rename from src/app/prism.css rename to packages/core/src/styles/prism.css diff --git a/tailwind.config.ts b/packages/core/tailwind.config.ts similarity index 100% rename from tailwind.config.ts rename to packages/core/tailwind.config.ts diff --git a/packages/core/tailwind.preset.cjs b/packages/core/tailwind.preset.cjs new file mode 100644 index 0000000..d92a97d --- /dev/null +++ b/packages/core/tailwind.preset.cjs @@ -0,0 +1,105 @@ +const { + default: flattenColorPalette, +} = require("tailwindcss/lib/util/flattenColorPalette"); + +const config = { + darkMode: "class", + theme: { + extend: { + backgroundImage: { + "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", + "gradient-conic": + "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", + }, + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + navbar: { + DEFAULT: "hsl(var(--navbar-bg))", + scrolled: "hsl(var(--navbar-bg-scrolled))", + }, + hover: { + DEFAULT: "hsl(var(--hover-bg))", + foreground: "hsl(var(--hover-foreground))", + }, + }, + animation: { + scroll: + "scroll var(--animation-duration, 40s) var(--animation-direction, forwards) linear infinite", + marquee: "marquee var(--marquee-duration) linear infinite", + "fade-in": "fade-in 0.5s linear forwards", + }, + boxShadow: { + derek: `0px 0px 0px 1px hsl(var(--shadow-color) / 0.06), + 0px 1px 1px -0.5px hsl(var(--shadow-color) / 0.06), + 0px 3px 3px -1.5px hsl(var(--shadow-color) / 0.06), + 0px 6px 6px -3px hsl(var(--shadow-color) / 0.06), + 0px 12px 12px -6px hsl(var(--shadow-color) / 0.06), + 0px 24px 24px -12px hsl(var(--shadow-color) / 0.06)`, + aceternity: `0px 2px 3px -1px hsl(var(--shadow-color) / 0.1), 0px 1px 0px 0px hsl(var(--shadow-color) / 0.02), 0px 0px 0px 1px hsl(var(--shadow-color) / 0.08)`, + navbar: `0px -2px 0px 0px hsl(var(--shadow-color)), 0px 2px 0px 0px hsl(var(--shadow-color))`, + }, + keyframes: { + scroll: { + to: { + transform: "translate(calc(-50% - 0.5rem))", + }, + }, + marquee: { + "100%": { + transform: "translateY(-50%)", + }, + }, + "fade-in": { + from: { + opacity: "0", + }, + to: { + opacity: "1", + }, + }, + }, + }, + }, + plugins: [addVariablesForColors, require("@tailwindcss/typography")], +}; + +function addVariablesForColors({ addBase, theme }) { + let allColors = flattenColorPalette(theme("colors")); + let newVars = Object.fromEntries( + Object.entries(allColors).map(([key, val]) => [`--${key}`, val]) + ); + + addBase({ + ":root": newVars, + }); +} + +module.exports = config; diff --git a/tests/ranking-score.test.ts b/packages/core/tests/ranking-score.test.ts similarity index 100% rename from tests/ranking-score.test.ts rename to packages/core/tests/ranking-score.test.ts diff --git a/tests/seo-generator.test.ts b/packages/core/tests/seo-generator.test.ts similarity index 100% rename from tests/seo-generator.test.ts rename to packages/core/tests/seo-generator.test.ts diff --git a/tsconfig.json b/packages/core/tsconfig.json similarity index 94% rename from tsconfig.json rename to packages/core/tsconfig.json index cadc186..e8e1e6f 100644 --- a/tsconfig.json +++ b/packages/core/tsconfig.json @@ -44,6 +44,8 @@ ".next-minimal/dev/types/**/*.ts" ], "exclude": [ - "node_modules" + ".next*", + "node_modules", + "src/kit/site-themes" ] -} +} \ No newline at end of file diff --git a/scripts/dev-all-themes.sh b/scripts/dev-all-themes.sh deleted file mode 100755 index 1759bcf..0000000 --- a/scripts/dev-all-themes.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# 一键构建并启动五套主题站点(3001-3005) -set -e -cd "$(dirname "$0")/.." - -echo "=== 构建 5 套主题 ===" -bun run build -for theme in product editorial niche minimal; do - SITE_THEME=$theme NEXT_DIST_DIR=.next-$theme bun run build -done - -echo "=== 启动 5 个站点 ===" -bunx next start -p 3001 & -SITE_THEME=product NEXT_DIST_DIR=.next-product bunx next start -p 3002 & -SITE_THEME=editorial NEXT_DIST_DIR=.next-editorial bunx next start -p 3003 & -SITE_THEME=niche NEXT_DIST_DIR=.next-niche bunx next start -p 3004 & -SITE_THEME=minimal NEXT_DIST_DIR=.next-minimal bunx next start -p 3005 & - -echo "classic → http://localhost:3001" -echo "product → http://localhost:3002" -echo "editorial → http://localhost:3003" -echo "niche → http://localhost:3004" -echo "minimal → http://localhost:3005" -wait diff --git a/sites/ai-stack/.env.example b/sites/ai-stack/.env.example new file mode 100644 index 0000000..1783e38 --- /dev/null +++ b/sites/ai-stack/.env.example @@ -0,0 +1,14 @@ +# AI Stack 环境变量(与底座共享同一套 PostgreSQL / Better Auth / Admin) +DATABASE_URL="postgresql://postgres:postgres@127.0.0.1:15433/ai_directory" +BETTER_AUTH_SECRET="dev-secret-ai-directory-platform-0123456789abcdef" +BETTER_AUTH_URL="http://localhost:3001" +AUTH_GOOGLE_ID="" +AUTH_GOOGLE_SECRET="" +NEXT_PUBLIC_AUTH_GOOGLE_ENABLED="false" +AUTH_GITHUB_ID="" +AUTH_GITHUB_SECRET="" +NEXT_PUBLIC_AUTH_GITHUB_ENABLED="false" +RESEND_API_KEY="" +RESEND_FROM_EMAIL="AI Stack " +NEXT_PUBLIC_APP_URL="http://localhost:3001" +NEXT_PUBLIC_APP_NAME="AI Stack" diff --git a/sites/ai-stack/.gitignore b/sites/ai-stack/.gitignore new file mode 100644 index 0000000..309faff --- /dev/null +++ b/sites/ai-stack/.gitignore @@ -0,0 +1,5 @@ +/node_modules +/.next +/.env*.local +next-env.d.ts +*.tsbuildinfo diff --git a/sites/ai-stack/mdx-components.tsx b/sites/ai-stack/mdx-components.tsx new file mode 100644 index 0000000..2a15d84 --- /dev/null +++ b/sites/ai-stack/mdx-components.tsx @@ -0,0 +1 @@ +export { useMDXComponents } from "@aidir/core/src/mdx-components"; diff --git a/sites/ai-stack/messages/en.json b/sites/ai-stack/messages/en.json new file mode 100644 index 0000000..2be2167 --- /dev/null +++ b/sites/ai-stack/messages/en.json @@ -0,0 +1,796 @@ +{ + "common": { + "brand": { + "name": "AI Stack", + "tagline": "The professional AI tools directory — ranked by the community.", + "copyright": "Copyright © 2025", + "allRightsReserved": "All rights reserved" + }, + "actions": { + "signIn": "Sign in", + "signUp": "Sign Up", + "signOut": "Sign Out", + "getStarted": "Get Started", + "startFree": "Start Free", + "learnMore": "Learn More", + "viewAll": "View All", + "submit": "Submit", + "cancel": "Cancel", + "save": "Save", + "delete": "Delete", + "edit": "Edit", + "update": "Update", + "continue": "Continue", + "back": "Back", + "next": "Next", + "contactSales": "Contact Sales", + "startTrial": "Start Free Trial" + }, + "status": { + "loading": "Loading...", + "verified": "Verified", + "pending": "Pending", + "active": "Active", + "inactive": "Inactive" + } + }, + "navigation": { + "main": { + "tools": "Tools", + "blog": "Blog", + "contact": "Contact", + "dashboard": "Dashboard", + "profile": "Profile" + }, + "footer": { + "legal": { + "terms": "Terms of Service", + "privacy": "Privacy Policy", + "cookies": "Cookie Policy" + }, + "social": { + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "Discover the Best AI Tools", + "title": "AI Stack — Find the Best AI Tools, Ranked by Real Users", + "description": "The professional AI tools directory. 1,000+ AI tools across 14 categories ranked by community votes, reviews and engagement.", + "cta": { + "primary": "Explore Tools", + "secondary": "Read Blog" + } + }, + "features": { + "title": "Everything You Need to Build Fast", + "subtitle": "Stop wasting time on boilerplate. Focus on your unique features while this template handles the foundation.", + "items": { + "aiOptimized": { + "title": "Modern Tech Stack", + "description": "Built with Next.js 14, TypeScript, Tailwind CSS, and PostgreSQL. Production-ready from day one." + }, + "zeroPipeline": { + "title": "Authentication Ready", + "description": "Email/password and Google OAuth configured. Session management and protected routes ready to use." + }, + "nonTechnical": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management. Monitor your users and manage permissions easily." + }, + "productionGrade": { + "title": "Blog System Included", + "description": "MDX-powered blog with i18n support. Create content in multiple languages with SEO optimization." + } + } + }, + "testimonials": { + "title": "Trusted by AI Enthusiasts", + "subtitle": "Join thousands of users discovering the best AI tools for their workflows.", + "items": [ + { + "name": "Sarah Chen", + "quote": "Toolso.AI helped me find the perfect AI writing assistant. The categorization makes discovery so easy!", + "designation": "Content Creator" + }, + { + "name": "Michael Park", + "quote": "Finally, a comprehensive AI tools directory that's well-organized. Saved me hours of research.", + "designation": "Product Manager" + }, + { + "name": "Emily Rodriguez", + "quote": "I discover new AI tools every week on Toolso.AI. It's become my go-to resource for AI exploration.", + "designation": "Startup Founder" + }, + { + "name": "David Kim", + "quote": "The search and filter features are incredibly helpful. Found exactly what I needed in minutes.", + "designation": "Software Engineer" + }, + { + "name": "Lisa Wang", + "quote": "Love the multilingual support! Makes it easy to explore AI tools in both English and Chinese.", + "designation": "Digital Marketer" + }, + { + "name": "James Liu", + "quote": "Great resource for staying up-to-date with the latest AI tools. The blog section is also very informative.", + "designation": "AI Researcher" + } + ] + }, + "companies": { + "title": "Built with Industry-Leading Technologies", + "subtitle": "Built on modern stack trusted by the world's best teams" + }, + "gridFeatures": { + "aiReady": { + "title": "Extensible Architecture", + "description": "Clean, modular code structure. Easy to add new features and integrations." + }, + "creem": { + "title": "Database Ready", + "description": "PostgreSQL with Drizzle ORM configured. Type-safe queries and migrations ready." + }, + "auth": { + "title": "Authentication System", + "description": "Better Auth with email/password and OAuth. Session management and protected routes ready." + }, + "deploy": { + "title": "One-Click Deploy", + "description": "Deploy to Vercel, Railway, or any platform instantly. Production-ready from day one." + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "Modern tech stack with Next.js 14, TypeScript, Tailwind CSS, and shadcn/ui components." + }, + "database": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management and system monitoring." + }, + "seo": { + "title": "SEO & Marketing", + "description": "Meta tags, Open Graph, sitemap, and analytics. Everything for organic growth." + }, + "vibeCoding": { + "title": "Blog System", + "description": "MDX-powered blog with multi-language support. Create content that ranks." + } + }, + "cta": { + "title": "Find Your Perfect AI Tool", + "description": "Browse our curated collection of AI tools and discover what works best for you.", + "button": "Explore Tools" + }, + "auth": { + "login": { + "title": "Sign in to your account", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "forgotPassword": "Forgot password?", + "noAccount": "Don't have an account?", + "signUpLink": "Sign Up", + "signInButton": "Sign in", + "signingIn": "Signing in...", + "errors": { + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "loginFailed": "Login failed. Please try again.", + "googleLoginFailed": "Google login failed. Please try again." + } + }, + "signup": { + "title": "Sign up for an account", + "nameLabel": "Full name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "hasAccount": "Already have an account?", + "signInLink": "Sign in", + "signUpButton": "Sign Up", + "signingUp": "Signing up...", + "errors": { + "nameRequired": "Please enter your name", + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "signupFailed": "Sign up failed. Please try again.", + "googleSignupFailed": "Google sign up failed. Please try again." + } + }, + "social": { + "googleSignIn": "Continue with Google", + "or": "Or continue with", + "githubSignIn": "Continue with GitHub" + }, + "checkEmail": { + "title": "Check Your Email", + "description": "We've sent a verification link to your email address. Please click the link to verify your account and get started.", + "notReceived": "Didn't receive the email?", + "checkSpam": "Check your spam or junk folder", + "checkEmailCorrect": "Make sure you entered the correct email", + "waitAndCheck": "Wait a few minutes and check again", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent successfully! Please check your inbox.", + "resendError": "Failed to resend verification email.", + "backToLogin": "Back to Login", + "securityNote": "For your security, the verification link will expire in 24 hours." + }, + "verifyEmail": { + "verifying": "Verifying Email", + "verifyingDescription": "Please wait while we verify your email address...", + "success": "Email Verified!", + "successDescription": "Your email has been successfully verified! Redirecting to login...", + "alreadyVerified": "Already Verified", + "failed": "Verification Failed", + "goToLogin": "Go to Login", + "backToSignUp": "Back to Sign Up", + "requestNew": "Request New Verification Email", + "checkSpamNote": "Check your spam folder if you don't see our emails" + }, + "emailVerifiedGuard": { + "title": "Email Verification Required", + "description": "Please verify your email address to access this page. Check your inbox for the verification link we sent to:", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent! Please check your inbox.", + "resendError": "Failed to send verification email. Please try again.", + "signOutLink": "Sign out and try a different account" + } + }, + "Admin": { + "sidebar": { + "title": "Admin Panel", + "subtitle": "System Management", + "dashboard": "Dashboard", + "tools": "Tools", + "categories": "Categories", + "tags": "Tags", + "users": "Users", + "backToDashboard": "Back to User Dashboard", + "submissions": "Submissions", + "claims": "Claims", + "reviews": "Reviews", + "discovery": "Discovery", + "votes": "Vote Audit", + "analytics": "Analytics" + }, + "header": { + "welcome": "Welcome", + "adminBadge": "Admin" + }, + "dashboard": { + "title": "Admin Dashboard", + "totalUsers": "Total Users", + "activeUsers": "Active Users", + "recentUsers": "Recent Users", + "viewAllUsers": "View All Users" + }, + "toolsManagement": { + "title": "Tools Management", + "totalCount": "{count} tools", + "searchPlaceholder": "Search tool name or slug...", + "allStatus": "All Status", + "published": "Published", + "draft": "Draft", + "addTool": "Add Tool", + "tool": "Tool", + "slug": "Slug", + "status": "Status", + "createdAt": "Created", + "actions": "Actions", + "noData": "No tools data", + "previous": "Previous", + "next": "Next", + "confirmDelete": "Are you sure you want to delete \"{name}\"? This action cannot be undone.", + "deleted": "Tool deleted", + "deleteFailed": "Delete failed", + "statusUpdated": "Status updated", + "statusUpdateFailed": "Status update failed", + "toDraft": "Set to draft", + "publish": "Publish", + "edit": "Edit", + "visitWebsite": "Visit website", + "delete": "Delete", + "modal": { + "editTitle": "Edit Tool", + "addTitle": "Add Tool", + "basicInfo": "Basic Information", + "linksAndImages": "Links & Images", + "categories": "Categories", + "tags": "Tags", + "slug": "Slug", + "status": "Status", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "domain": "Domain", + "websiteUrl": "Website URL", + "logoUrl": "Logo URL", + "coverImageUrl": "Cover Image URL", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTool": "Create Tool", + "requiredField": "Please fill in required fields", + "updated": "Tool updated", + "created": "Tool created", + "updateFailed": "Update failed", + "createFailed": "Create failed", + "statusDraft": "Draft", + "statusPublished": "Published", + "pricing": "Pricing", + "pricingNone": "Not set", + "pricingFree": "Free", + "pricingFreemium": "Freemium", + "pricingPaid": "Paid", + "featured": "Featured on homepage" + } + }, + "categoriesManagement": { + "title": "Categories Management", + "addCategory": "Add Category", + "order": "Order", + "category": "Category", + "slug": "Slug", + "toolCount": "Tools", + "toolCountLabel": "{count} tools", + "actions": "Actions", + "noData": "No categories data", + "edit": "Edit", + "delete": "Delete", + "cannotDelete": "This category has {count} tools, cannot delete", + "confirmDelete": "Are you sure you want to delete category \"{name}\"?", + "deleted": "Category deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Category", + "addTitle": "Add Category", + "slug": "Slug", + "icon": "Icon (emoji)", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "sortOrder": "Sort Order", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createCategory": "Create Category", + "requiredField": "Please fill in required fields", + "updated": "Category updated", + "created": "Category created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "tagsManagement": { + "title": "Tags Management", + "searchPlaceholder": "Search tags...", + "addTag": "Add Tag", + "toolCountLabel": "{count} tools", + "noData": "No tags data", + "edit": "Edit", + "delete": "Delete", + "confirmDeleteWithTools": "This tag is used by {count} tools. Deleting it will remove the tag from these tools. Continue?", + "confirmDelete": "Are you sure you want to delete tag \"{name}\"?", + "deleted": "Tag deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Tag", + "addTitle": "Add Tag", + "slug": "Slug", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTag": "Create Tag", + "requiredField": "Please fill in required fields", + "updated": "Tag updated", + "created": "Tag created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "users": { + "searchPlaceholder": "Search by name or email...", + "user": "User", + "role": "Role", + "status": "Status", + "joined": "Joined", + "actions": "Actions", + "admin": "Admin", + "banned": "Banned", + "active": "Active", + "unverified": "Unverified", + "verified": "Verified", + "emailVerified": "Email Verified", + "edit": "Edit", + "ban": "Ban", + "unban": "Unban", + "viewDetails": "View Details", + "banReason": "Ban Reason", + "banExpires": "Ban Expires", + "userDetails": "User Details", + "name": "Name", + "email": "Email", + "lastActive": "Last Active", + "close": "Close", + "roleUpdated": "Role updated successfully", + "roleUpdateFailed": "Failed to update role", + "userBanned": "User has been banned", + "userUnbanned": "User has been unbanned", + "banFailed": "Failed to ban/unban user", + "cancel": "Cancel", + "pagination": { + "previous": "Previous", + "next": "Next", + "page": "Page {current} of {total}" + } + } + }, + "dashboard": { + "title": "Dashboard", + "welcome": "Welcome back", + "cards": { + "personalInfo": { + "title": "Personal Info", + "labels": { + "name": "Name", + "email": "Email", + "status": "Status", + "notSet": "Not set" + } + }, + "quickActions": { + "title": "Quick Actions", + "editProfile": "Edit Profile", + "accountSettings": "Account Settings", + "securitySettings": "Security Settings" + } + }, + "favorites": { + "title": "My Favorites", + "empty": "No favorite tools yet.", + "browseTools": "Browse tools and save your favorites" + } + }, + "profile": { + "title": "Profile", + "subtitle": "Manage your account settings and preferences", + "sections": { + "basicInfo": { + "title": "Basic Information", + "fullName": "Full Name", + "email": "Email Address", + "verificationStatus": "Verification Status", + "notSet": "Not set", + "nameNotSet": "Name not set", + "accountId": "Account ID" + }, + "accountSettings": { + "title": "Account Settings", + "memberSince": "Member Since", + "lastLogin": "Last Login", + "accountType": "Account Type" + } + }, + "form": { + "nameLabel": "Name", + "namePlaceholder": "Enter your name", + "emailLabel": "Email", + "emailPlaceholder": "Enter your email", + "updateButton": "Update Profile", + "updating": "Updating...", + "updateSuccess": "Profile updated successfully!", + "updateError": "Failed to update profile. Please try again." + } + }, + "contact": { + "title": "Contact Us", + "subtitle": "We'd love to hear from you. Send us a message and we'll respond as soon as possible.", + "description": "Please reach out to us and we will get back to you shortly.", + "testimonial": { + "title": "We're here to help", + "description": "Our team is ready to assist you with any questions or feedback." + }, + "form": { + "nameLabel": "Full Name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "companyLabel": "Company", + "companyPlaceholder": "Your Company", + "messageLabel": "Message", + "messagePlaceholder": "Enter your message here", + "submitButton": "Submit", + "submitting": "Sending...", + "submitSuccess": "Message sent successfully!", + "submitError": "Failed to send message. Please try again." + } + }, + "blog": { + "title": "Blog", + "subtitle": "Latest insights and updates from our team", + "readMore": "Read More", + "minRead": "min read" + }, + "errors": { + "404": { + "title": "404 - Page Not Found", + "message": "The page you are looking for doesn't exist.", + "backHome": "Go to Homepage" + }, + "500": { + "title": "Something Went Wrong", + "message": "We're experiencing technical difficulties. Please try again later.", + "backHome": "Back to Home" + }, + "general": { + "title": "An Error Occurred", + "message": "Something unexpected happened. Please try again.", + "tryAgain": "Try Again" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "John Doe", + "designation": "Software Engineer" + }, + { + "name": "Jane Smith", + "designation": "Product Manager" + }, + { + "name": "Bob Johnson", + "designation": "Designer" + }, + { + "name": "Alice Brown", + "designation": "Developer" + } + ] + }, + "footer": { + "tagline": "Discover the best AI tools to boost your productivity.", + "product": { + "title": "Product", + "features": "Features", + "documentation": "Documentation" + }, + "company": { + "title": "Company", + "about": "About", + "blog": "Blog", + "careers": "Careers" + }, + "legal": { + "title": "Legal", + "privacy": "Privacy", + "terms": "Terms", + "cookies": "Cookies" + }, + "social": { + "title": "Social", + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + }, + "newsletter": { + "title": "Subscribe to Newsletter", + "description": "Get the latest updates and news directly in your inbox.", + "placeholder": "Enter your email", + "subscribe": "Subscribe", + "success": "Subscribed! Thanks for joining.", + "invalidEmail": "Please enter a valid email address.", + "error": "Subscription failed. Please try again." + } + }, + "tools": { + "title": "AI Tools Directory", + "subtitle": "Discover the best AI tools to boost your productivity", + "searchPlaceholder": "Search tools...", + "all": "All", + "foundTools": "Found {count} tools", + "visitWebsite": "Visit website", + "noTools": "No tools found", + "backToTools": "Back to tools", + "about": "About", + "categories": "Categories", + "tags": "Tags", + "visitButton": "Visit Website", + "toolInfo": "Tool Info", + "domain": "Domain", + "added": "Added", + "notFound": "Tool Not Found", + "favorites": { + "add": "Save to Favorites", + "remove": "Remove from Favorites", + "loginRequired": "Please sign in to save favorites", + "error": "Action failed. Please try again." + }, + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid" + }, + "categoryPage": { + "viewAll": "View all {count} tools" + }, + "reviewCta": "Ratings and reviews come from verified community members. Voted Helpful counts are shown next to each review.", + "alternatives": "Alternatives", + "seeAllAlternatives": "See all alternatives", + "stats": { + "votes": "Upvotes", + "views": "Views" + }, + "share": { + "share": "Share", + "copy": "Copy", + "copyLink": "Copy link", + "copied": "Link copied to clipboard" + }, + "sort": { + "latest": "Latest", + "trending": "Trending" + } + }, + "seo": { + "home": { + "title": "AI Stack — Find the Best AI Tools, Ranked by Real Users", + "description": "The professional AI tools directory. 1,000+ AI tools across 14 categories ranked by community votes, reviews and engagement.", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "Blog - Toolso.AI", + "description": "Latest insights, tutorials and updates about AI tools. Stay informed about the best AI tools and industry trends.", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "Contact Us - Toolso.AI", + "description": "Get in touch with us. We'd love to hear your feedback and tool suggestions.", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "Login - Toolso.AI", + "description": "Sign in to your account to submit tools, save favorites, and contribute to our AI tools directory.", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "Sign Up - Toolso.AI", + "description": "Create your account and start contributing to our AI tools directory. Submit tools and join our community.", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "Terms of Service - Toolso.AI", + "description": "Read our terms of service to understand the rules and guidelines for using Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "Privacy Policy - Toolso.AI", + "description": "Learn how we collect, use, and protect your personal information and data on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie Policy - Toolso.AI", + "description": "Understand how we use cookies and similar tracking technologies on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI Tools Directory - Discover the Best AI Tools", + "description": "Explore our curated collection of AI tools. Find the best AI tools for productivity, creativity, and more." + } + }, + "featuredTools": { + "title": "Featured Tools", + "subtitle": "Curated collection of AI tools to boost your productivity", + "visitWebsite": "Visit website", + "empty": "No tools yet. Add some in the admin panel.", + "viewAll": "View All Tools" + }, + "voting": { + "vote": "Upvote", + "voted": "Upvoted", + "unvote": "Remove vote", + "loginRequired": "Please sign in to vote — you'll be brought right back.", + "rateLimited": "Slow down a bit — too many votes in a short time.", + "error": "Vote failed. Please try again." + }, + "reviews": { + "title": "Reviews", + "writeReview": "Write a review", + "empty": "No reviews yet — be the first to share your experience.", + "loadMore": "Load more", + "loading": "Loading...", + "helpful": "Helpful", + "verifiedUser": "Verified user", + "pros": "Pros", + "cons": "Cons", + "yourRating": "Your rating", + "ratingRequired": "Please pick a star rating first.", + "titlePlaceholder": "Sum it up in one line (optional)", + "contentPlaceholder": "What did you use it for? How well does it work?", + "prosPlaceholder": "What do you like about it?", + "consPlaceholder": "What could be better?", + "useCasePlaceholder": "Your use case (e.g. social media content)", + "saving": "Saving...", + "submit": "Publish review", + "update": "Update review", + "cancel": "Cancel", + "delete": "Delete my review", + "deleted": "Review deleted", + "tooShort": "Review is a bit short — tell us at least a sentence.", + "error": "Could not save your review. Please try again.", + "basedOn": "Based on {count} reviews" + }, + "submission": { + "name": "Tool name", + "websiteUrl": "Website URL", + "tagline": "Tagline", + "taglinePlaceholder": "One-line pitch shown on cards", + "description": "Description", + "descriptionPlaceholder": "What does it do? Who is it for? What makes it different?", + "logoUrl": "Logo URL", + "category": "Category", + "pricingLabel": "Pricing model", + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid", + "freeTrial": "Free Trial", + "openSource": "Open Source", + "contact": "Contact for pricing" + }, + "founderName": "Founder / company", + "contactEmail": "Contact email", + "socialLinks": "Social links", + "note": "Notes for the editors", + "notePlaceholder": "Anything that helps us review faster (launch date, metrics...)", + "selectPlaceholder": "Select...", + "submit": "Submit for review", + "submitting": "Submitting...", + "submitted": "Submitted! We'll review it within 48 hours.", + "reviewNote": "Free listing · reviewed within 48h", + "duplicateFound": "Looks like this tool may already be listed:", + "duplicateBlocked": "This tool appears to be already listed. Duplicate submissions are not allowed.", + "error": "Submission failed. Please check your inputs." + }, + "claim": { + "claimThisTool": "Claim this tool", + "verifiedOwner": "Verified owner", + "formTitle": "Claim ownership of this listing", + "rolePlaceholder": "Your role (e.g. Founder, Marketing lead)", + "messagePlaceholder": "How should we verify you? (same-domain email, press page...)", + "proofPlaceholder": "Proof URL (optional)", + "submit": "Send claim", + "submitting": "Sending...", + "submitted": "Claim sent! We'll review it shortly.", + "pendingExists": "You already have a pending claim for this tool.", + "cancel": "Cancel", + "error": "Could not send your claim." + }, + "rankings": { + "title": "Community Rankings", + "subtitle": "Seven live leaderboards powered by votes, reviews, saves and engagement — not sponsored placement.", + "trending": "Trending", + "popular": "Popular", + "mostVoted": "Most Voted", + "mostSaved": "Most Saved", + "highestRated": "Highest Rated", + "new": "New", + "editorsChoice": "Editor's Choice", + "empty": "No tools on this board yet." + } +} diff --git a/sites/ai-stack/messages/zh.json b/sites/ai-stack/messages/zh.json new file mode 100644 index 0000000..38b65a6 --- /dev/null +++ b/sites/ai-stack/messages/zh.json @@ -0,0 +1,804 @@ +{ + "common": { + "brand": { + "name": "AI Stack", + "tagline": "The professional AI tools directory — ranked by the community.", + "copyright": "版权所有 © 2025", + "allRightsReserved": "保留所有权利" + }, + "actions": { + "signIn": "登录", + "signUp": "注册", + "signOut": "退出登录", + "getStarted": "开始使用", + "startFree": "免费开始", + "startTrial": "开始试用", + "contactSales": "联系销售", + "learnMore": "了解更多", + "viewAll": "查看全部", + "submit": "提交", + "cancel": "取消", + "save": "保存", + "delete": "删除", + "edit": "编辑", + "update": "更新", + "continue": "继续", + "back": "返回", + "next": "下一步" + }, + "status": { + "loading": "加载中...", + "verified": "已验证", + "pending": "待处理", + "active": "已激活", + "inactive": "未激活" + } + }, + "navigation": { + "main": { + "tools": "工具库", + "blog": "博客", + "contact": "联系我们", + "dashboard": "仪表盘", + "profile": "个人资料" + }, + "footer": { + "legal": { + "terms": "服务条款", + "privacy": "隐私政策", + "cookies": "Cookie 政策" + }, + "social": { + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "发现最好的 AI 工具", + "title": "AI Stack — 由真实用户排名的 AI 工具目录", + "description": "专业 AI 工具导航:14 个分类、1000+ 工具,由社区投票、评论与互动数据实时排名。", + "cta": { + "primary": "探索工具", + "secondary": "阅读博客" + } + }, + "features": { + "title": "开始构建所需的一切", + "subtitle": "告别重复的样板代码。专注于你的独特功能,基础设施已为你准备就绪。", + "items": { + "aiOptimized": { + "title": "现代技术栈", + "description": "基于 Next.js 14、TypeScript、Tailwind CSS 和 PostgreSQL 构建。采用行业最佳实践和企业级架构。" + }, + "zeroPipeline": { + "title": "开箱即用的认证", + "description": "Better Auth 驱动的完整认证系统,支持邮箱密码和 OAuth 登录、邮箱验证、密码重置和会话管理。" + }, + "nonTechnical": { + "title": "管理后台", + "description": "功能齐全的管理面板,包含用户管理、角色权限控制和业务数据监控。轻松扩展满足你的需求。" + }, + "productionGrade": { + "title": "博客系统", + "description": "内置 MDX 博客系统,支持语法高亮、SEO 优化和国际化。非常适合内容营销和产品更新。" + } + } + }, + "testimonials": { + "title": "用户评价", + "subtitle": "来自使用 Toolso.AI 发现优质 AI 工具的真实用户反馈。", + "items": [ + { + "name": "张伟", + "quote": "Toolso.AI 帮我找到了完美的 AI 写作助手,分类清晰让发现变得非常简单!", + "designation": "内容创作者" + }, + { + "name": "王强", + "quote": "终于有了一个组织良好的 AI 工具目录,节省了我大量的研究时间。", + "designation": "产品经理" + }, + { + "name": "李娜", + "quote": "每周都能在 Toolso.AI 上发现新的 AI 工具,已经成为我探索 AI 的首选资源。", + "designation": "创业者" + }, + { + "name": "陈婷", + "quote": "搜索和筛选功能非常好用,几分钟就找到了我需要的工具。", + "designation": "软件工程师" + }, + { + "name": "赵明", + "quote": "喜欢中英文双语支持!可以轻松探索各种 AI 工具。", + "designation": "数字营销专家" + }, + { + "name": "朱悦", + "quote": "了解最新 AI 工具的好资源,博客板块也很有价值。", + "designation": "AI 研究员" + } + ] + }, + "companies": { + "title": "采用行业领先技术构建", + "subtitle": "基于现代技术栈,被全球顶尖团队信赖" + }, + "gridFeatures": { + "aiReady": { + "title": "可扩展架构", + "description": "模块化设计,轻松添加新功能。遵循 Next.js 最佳实践,便于维护。" + }, + "creem": { + "title": "邮件系统", + "description": "集成 Resend 邮件服务,支持交易邮件、验证邮件和新闻通讯。" + }, + "auth": { + "title": "身份认证", + "description": "Better Auth 提供邮箱密码和 OAuth 支持。会话管理和路由保护已就绪。" + }, + "deploy": { + "title": "一键部署", + "description": "即刻部署到 Vercel、Railway 或任何平台。从第一天起即可投入生产。" + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "现代技术栈包括 Next.js 14、TypeScript、Tailwind CSS 和 shadcn/ui 组件。" + }, + "database": { + "title": "数据库 + ORM", + "description": "PostgreSQL 配合 Drizzle ORM。类型安全的查询和迁移已配置。" + }, + "seo": { + "title": "SEO 和营销", + "description": "元标签、Open Graph、站点地图和分析。为有机增长准备的一切。" + }, + "vibeCoding": { + "title": "国际化支持", + "description": "内置中英文支持,使用 next-intl 实现。轻松添加更多语言。" + } + }, + "cta": { + "title": "找到最适合你的 AI 工具", + "description": "浏览精选 AI 工具集合,发现能帮助你提升效率的最佳工具。", + "button": "探索工具" + }, + "auth": { + "login": { + "title": "登录您的账户", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "forgotPassword": "忘记密码?", + "noAccount": "还没有账户?", + "signUpLink": "注册", + "signInButton": "登录", + "signingIn": "登录中...", + "errors": { + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "loginFailed": "登录失败,请重试。", + "googleLoginFailed": "Google 登录失败,请重试。" + } + }, + "signup": { + "title": "注册一个新账户", + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "hasAccount": "已经有账户了?", + "signInLink": "登录", + "signUpButton": "注册", + "signingUp": "注册中...", + "errors": { + "nameRequired": "请输入您的姓名", + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "signupFailed": "注册失败,请重试。", + "googleSignupFailed": "Google 注册失败,请重试。" + } + }, + "social": { + "googleSignIn": "使用 Google 继续", + "or": "或者继续使用", + "githubSignIn": "使用 GitHub 登录" + }, + "checkEmail": { + "title": "请查收您的邮件", + "description": "我们已向您的邮箱发送了验证链接。请点击链接验证您的账户并开始使用。", + "notReceived": "没有收到邮件?", + "checkSpam": "检查垃圾邮件文件夹", + "checkEmailCorrect": "确认输入的邮箱地址是否正确", + "waitAndCheck": "等待几分钟后再次查看", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件发送成功!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "backToLogin": "返回登录", + "securityNote": "为了您的安全,验证链接将在24小时后失效。" + }, + "verifyEmail": { + "verifying": "正在验证邮箱", + "verifyingDescription": "请稍候,我们正在验证您的邮箱地址...", + "success": "邮箱验证成功!", + "successDescription": "您的邮箱已成功验证!正在跳转到登录页面...", + "alreadyVerified": "已验证", + "failed": "验证失败", + "goToLogin": "前往登录", + "backToSignUp": "返回注册", + "requestNew": "重新发送验证邮件", + "checkSpamNote": "如果没有收到邮件,请检查垃圾邮件文件夹" + }, + "emailVerifiedGuard": { + "title": "需要验证邮箱", + "description": "请验证您的邮箱地址以访问此页面。请查收我们发送到以下邮箱的验证链接:", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件已发送!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "signOutLink": "退出并使用其他账户" + } + }, + "Admin": { + "sidebar": { + "title": "管理后台", + "subtitle": "系统管理", + "dashboard": "仪表板", + "tools": "工具管理", + "categories": "分类管理", + "tags": "标签管理", + "users": "用户管理", + "backToDashboard": "返回用户面板", + "submissions": "提交审核", + "claims": "认领审核", + "reviews": "评论审核", + "discovery": "发现管理", + "votes": "投票审计", + "analytics": "数据分析" + }, + "header": { + "welcome": "欢迎", + "adminBadge": "管理员" + }, + "dashboard": { + "title": "管理员仪表板", + "totalUsers": "总用户数", + "activeUsers": "活跃用户", + "recentUsers": "最近注册用户", + "viewAllUsers": "查看所有用户" + }, + "toolsManagement": { + "title": "工具管理", + "totalCount": "共 {count} 个工具", + "searchPlaceholder": "搜索工具名称或 slug...", + "allStatus": "全部状态", + "published": "已发布", + "draft": "草稿", + "addTool": "添加工具", + "tool": "工具", + "slug": "Slug", + "status": "状态", + "createdAt": "创建时间", + "actions": "操作", + "noData": "暂无工具数据", + "previous": "上一页", + "next": "下一页", + "confirmDelete": "确定要删除工具 \"{name}\" 吗?此操作不可恢复。", + "deleted": "工具已删除", + "deleteFailed": "删除失败", + "statusUpdated": "状态已更新", + "statusUpdateFailed": "状态更新失败", + "toDraft": "转为草稿", + "publish": "发布", + "edit": "编辑", + "visitWebsite": "访问网站", + "delete": "删除", + "modal": { + "editTitle": "编辑工具", + "addTitle": "添加工具", + "basicInfo": "基本信息", + "linksAndImages": "链接和图片", + "categories": "分类", + "tags": "标签", + "slug": "Slug", + "status": "状态", + "nameEn": "英文名称", + "nameZh": "中文名称", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "domain": "域名", + "websiteUrl": "网站链接", + "logoUrl": "Logo URL", + "coverImageUrl": "封面图 URL", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTool": "创建工具", + "requiredField": "请填写必填字段", + "updated": "工具已更新", + "created": "工具已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败", + "statusDraft": "草稿", + "statusPublished": "已发布", + "pricing": "定价", + "pricingNone": "未设置", + "pricingFree": "免费", + "pricingFreemium": "免费增值", + "pricingPaid": "付费", + "featured": "首页精选" + } + }, + "categoriesManagement": { + "title": "分类管理", + "addCategory": "添加分类", + "order": "排序", + "category": "分类", + "slug": "Slug", + "toolCount": "工具数", + "toolCountLabel": "{count} 个工具", + "actions": "操作", + "noData": "暂无分类数据", + "edit": "编辑", + "delete": "删除", + "cannotDelete": "该分类下有 {count} 个工具,无法删除", + "confirmDelete": "确定要删除分类 \"{name}\" 吗?", + "deleted": "分类已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑分类", + "addTitle": "添加分类", + "slug": "Slug", + "icon": "图标 (emoji)", + "nameEn": "英文名称", + "nameZh": "中文名称", + "sortOrder": "排序", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createCategory": "创建分类", + "requiredField": "请填写必填字段", + "updated": "分类已更新", + "created": "分类已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "tagsManagement": { + "title": "标签管理", + "searchPlaceholder": "搜索标签...", + "addTag": "添加标签", + "toolCountLabel": "{count} 个工具", + "noData": "暂无标签数据", + "edit": "编辑", + "delete": "删除", + "confirmDeleteWithTools": "该标签被 {count} 个工具使用,删除后这些工具将失去该标签。确定要删除吗?", + "confirmDelete": "确定要删除标签 \"{name}\" 吗?", + "deleted": "标签已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑标签", + "addTitle": "添加标签", + "slug": "Slug", + "nameEn": "英文名称", + "nameZh": "中文名称", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTag": "创建标签", + "requiredField": "请填写必填字段", + "updated": "标签已更新", + "created": "标签已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "users": { + "searchPlaceholder": "搜索用户姓名或邮箱...", + "user": "用户", + "role": "角色", + "status": "状态", + "joined": "加入时间", + "actions": "操作", + "admin": "管理员", + "banned": "已禁用", + "active": "活跃", + "unverified": "未验证", + "edit": "编辑", + "ban": "禁用", + "unban": "解禁", + "viewDetails": "查看详情", + "banReason": "禁用原因", + "banExpires": "禁用到期", + "userDetails": "用户详情", + "name": "姓名", + "email": "邮箱", + "emailVerified": "邮箱验证", + "verified": "已验证", + "lastActive": "最后活跃", + "close": "关闭", + "roleUpdated": "角色已更新", + "roleUpdateFailed": "角色更新失败", + "userBanned": "用户已禁用", + "userUnbanned": "用户已解禁", + "banFailed": "禁用操作失败", + "pagination": { + "previous": "上一页", + "next": "下一页", + "page": "第 {current} / {total} 页" + }, + "cancel": "取消" + } + }, + "dashboard": { + "title": "仪表盘", + "welcome": "欢迎回来", + "cards": { + "personalInfo": { + "title": "个人信息", + "labels": { + "name": "姓名", + "email": "邮箱", + "status": "状态", + "notSet": "未设置" + } + }, + "quickActions": { + "title": "快捷操作", + "editProfile": "编辑个人资料", + "accountSettings": "账户设置", + "securitySettings": "安全设置" + } + }, + "favorites": { + "title": "我的收藏", + "empty": "还没有收藏的工具。", + "browseTools": "去浏览工具并收藏" + } + }, + "profile": { + "title": "个人资料", + "subtitle": "管理您的账户设置和偏好", + "sections": { + "basicInfo": { + "title": "基本信息", + "fullName": "姓名", + "email": "邮箱地址", + "verificationStatus": "验证状态", + "notSet": "未设置", + "nameNotSet": "姓名未设置", + "accountId": "账户 ID" + }, + "accountSettings": { + "title": "账户详情", + "memberSince": "注册于", + "lastLogin": "最近登录", + "accountType": "账户类型" + } + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "请输入您的姓名", + "emailLabel": "邮箱", + "emailPlaceholder": "请输入您的邮箱地址", + "updateButton": "更新资料", + "updating": "更新中...", + "updateSuccess": "个人资料更新成功", + "updateError": "个人资料更新失败" + } + }, + "contact": { + "title": "联系我们", + "subtitle": "我们很乐意倾听您的声音。给我们发送消息,我们会尽快回复。", + "description": "请联系我们,我们会尽快回复。", + "testimonial": { + "title": "帮助用户发现最佳 AI 工具", + "description": "Toolso.AI 致力于为用户提供精选的 AI 工具目录,帮助大家找到最适合的 AI 助手。" + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "companyLabel": "公司", + "companyPlaceholder": "某某科技有限公司", + "messageLabel": "消息", + "messagePlaceholder": "请在此处输入您的消息", + "submitButton": "提交", + "submitting": "发送中...", + "submitSuccess": "消息发送成功!", + "submitError": "消息发送失败,请重试。" + } + }, + "blog": { + "title": "博客", + "subtitle": "来自我们团队的最新见解与更新", + "readMore": "阅读更多", + "minRead": "分钟阅读" + }, + "errors": { + "404": { + "title": "404 - 页面未找到", + "message": "您正在寻找的页面不存在。", + "backHome": "返回首页" + }, + "500": { + "title": "出错了", + "message": "我们遇到了一些技术问题,请稍后重试。", + "backHome": "返回首页" + }, + "general": { + "title": "发生错误", + "message": "发生了一些意外情况,请重试。", + "tryAgain": "重试" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "张伟", + "designation": "软件工程师" + }, + { + "name": "王强", + "designation": "产品经理" + }, + { + "name": "李娜", + "designation": "数据科学家" + }, + { + "name": "陈婷", + "designation": "UX设计师" + }, + { + "name": "赵明", + "designation": "全栈开发者" + }, + { + "name": "朱悦", + "designation": "独立开发者" + } + ] + }, + "footer": { + "tagline": "发现最好的 AI 工具,提升你的工作效率。", + "product": { + "title": "产品", + "features": "功能", + "documentation": "文档" + }, + "company": { + "title": "公司", + "about": "关于我们", + "blog": "博客", + "careers": "招聘" + }, + "legal": { + "title": "法律", + "privacy": "隐私政策", + "terms": "服务条款", + "cookies": "Cookie 政策" + }, + "social": { + "title": "社交", + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + }, + "newsletter": { + "title": "订阅邮件", + "description": "获取最新动态和资讯,直接发送到您的邮箱。", + "placeholder": "输入您的邮箱", + "subscribe": "订阅", + "success": "订阅成功!感谢加入。", + "invalidEmail": "请输入有效的邮箱地址。", + "error": "订阅失败,请重试。" + } + }, + "tools": { + "title": "AI 工具库", + "subtitle": "发现最好的 AI 工具,提升您的工作效率", + "searchPlaceholder": "搜索工具...", + "all": "全部", + "foundTools": "共找到 {count} 个工具", + "visitWebsite": "访问网站", + "noTools": "暂无工具", + "backToTools": "返回工具列表", + "about": "介绍", + "categories": "分类", + "tags": "标签", + "visitButton": "访问网站", + "toolInfo": "工具信息", + "domain": "域名", + "added": "添加时间", + "notFound": "工具未找到", + "favorites": { + "add": "收藏", + "remove": "取消收藏", + "loginRequired": "请先登录后再收藏", + "error": "操作失败,请重试。" + }, + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费" + }, + "categoryPage": { + "viewAll": "查看该分类全部 {count} 个工具" + }, + "reviewCta": "评分与评论来自已验证的社区用户,每条评论旁展示“有用”计数。", + "alternatives": "替代品", + "seeAllAlternatives": "查看全部替代品", + "stats": { + "votes": "票数", + "views": "浏览量" + }, + "share": { + "share": "分享", + "copy": "复制", + "copyLink": "复制链接", + "copied": "链接已复制" + }, + "sort": { + "latest": "最新", + "trending": "最热" + } + }, + "seo": { + "home": { + "title": "AI Stack — 由真实用户排名的 AI 工具目录", + "description": "专业 AI 工具导航:14 个分类、1000+ 工具,由社区投票、评论与互动数据实时排名。", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "博客 - Toolso.AI", + "description": "关于 AI 工具的最新资讯、教程和更新。了解最佳 AI 工具和行业趋势。", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "联系我们 - Toolso.AI", + "description": "与我们取得联系。我们期待听到您的反馈和工具推荐建议。", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "登录 - Toolso.AI", + "description": "登录您的账户,提交工具、收藏喜爱的工具,为 AI 工具目录做贡献。", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "注册 - Toolso.AI", + "description": "创建您的账户,开始为 AI 工具目录做贡献。提交工具、加入我们的社区。", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "服务条款 - Toolso.AI", + "description": "阅读我们的服务条款,了解使用 Toolso.AI 的规则和指南。", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "隐私政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上收集、使用和保护您的个人信息和数据。", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie 政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上使用 cookies 和类似的跟踪技术。", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI 工具库 - 发现最好的 AI 工具", + "description": "浏览精选的 AI 工具集合。找到提升效率、激发创意的最佳 AI 工具。" + } + }, + "featuredTools": { + "title": "精选工具", + "subtitle": "精选优质 AI 工具,助力提升工作效率", + "visitWebsite": "访问网站", + "empty": "暂无工具,请先在后台添加", + "viewAll": "查看全部工具" + }, + "voting": { + "vote": "投票", + "voted": "已投", + "unvote": "取消投票", + "loginRequired": "投票需要先登录,登录后会自动回到本页。", + "rateLimited": "操作太快了,请稍后再试。", + "error": "投票失败,请重试。" + }, + "reviews": { + "title": "用户评论", + "writeReview": "写评论", + "empty": "还没有评论——来分享你的使用体验吧。", + "loadMore": "加载更多", + "loading": "加载中...", + "helpful": "有用", + "verifiedUser": "已验证用户", + "pros": "优点", + "cons": "缺点", + "yourRating": "你的评分", + "ratingRequired": "请先选择星级评分。", + "titlePlaceholder": "一句话总结(可选)", + "contentPlaceholder": "你用它做什么?效果如何?", + "prosPlaceholder": "它哪里做得好?", + "consPlaceholder": "哪里还可以改进?", + "useCasePlaceholder": "你的使用场景(如 社媒内容创作)", + "saving": "保存中...", + "submit": "发布评论", + "update": "更新评论", + "cancel": "取消", + "delete": "删除我的评论", + "deleted": "评论已删除", + "tooShort": "评论有点短——至少写一句话吧。", + "error": "评论保存失败,请重试。", + "basedOn": "共 {count} 条评论" + }, + "submission": { + "name": "工具名称", + "websiteUrl": "官网地址", + "tagline": "一句话简介", + "taglinePlaceholder": "展示在卡片上的一句话卖点", + "description": "详细介绍", + "descriptionPlaceholder": "它是做什么的?适合谁?有什么不同?", + "logoUrl": "Logo 地址", + "category": "分类", + "pricingLabel": "定价模式", + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费", + "freeTrial": "免费试用", + "openSource": "开源", + "contact": "联系定价" + }, + "founderName": "创始人 / 公司", + "contactEmail": "联系邮箱", + "socialLinks": "社交链接", + "note": "给编辑的备注", + "notePlaceholder": "任何能加快审核的信息(上线时间、数据等)", + "selectPlaceholder": "请选择...", + "submit": "提交审核", + "submitting": "提交中...", + "submitted": "已提交!我们会在 48 小时内完成审核。", + "reviewNote": "免费收录 · 48 小时内审核", + "duplicateFound": "这个工具可能已经被收录:", + "duplicateBlocked": "该工具似乎已被收录,不允许重复提交。", + "error": "提交失败,请检查填写内容。" + }, + "claim": { + "claimThisTool": "认领此工具", + "verifiedOwner": "已认证所有者", + "formTitle": "认领该收录页的所有权", + "rolePlaceholder": "你的身份(如 创始人、市场负责人)", + "messagePlaceholder": "我们如何验证你的身份?(同域名邮箱、官方报道页等)", + "proofPlaceholder": "证明链接(可选)", + "submit": "发送认领申请", + "submitting": "发送中...", + "submitted": "认领申请已发送,我们会尽快审核。", + "pendingExists": "你已有一条待审核的认领申请。", + "cancel": "取消", + "error": "认领申请发送失败。" + }, + "rankings": { + "title": "社区榜单", + "subtitle": "七个实时榜单由投票、评论、收藏与互动数据驱动——不接受赞助排名。", + "trending": "趋势榜", + "popular": "热门榜", + "mostVoted": "最多投票", + "mostSaved": "最多收藏", + "highestRated": "最高评分", + "new": "最新收录", + "editorsChoice": "编辑精选", + "empty": "该榜单暂无工具。" + } +} diff --git a/sites/ai-stack/next.config.mjs b/sites/ai-stack/next.config.mjs new file mode 100644 index 0000000..84f2b3e --- /dev/null +++ b/sites/ai-stack/next.config.mjs @@ -0,0 +1,5 @@ +import createSiteConfig from "@aidir/core/next-config"; + +export default createSiteConfig({ + requestPath: "./src/i18n/request.ts", +}); diff --git a/sites/ai-stack/package.json b/sites/ai-stack/package.json new file mode 100644 index 0000000..118109e --- /dev/null +++ b/sites/ai-stack/package.json @@ -0,0 +1,34 @@ +{ + "name": "site-ai-stack", + "version": "1.0.0", + "description": "AI Stack — AI directory site powered by @aidir/core", + "private": true, + "scripts": { + "dev": "next dev -p 3001", + "build": "next build", + "start": "next start -p 3001", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@aidir/core": "workspace:*", + "next": "16.1.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "sonner": "^2.0.7", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "framer-motion": "^12.43.0" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@types/mdx": "^2.0.13", + "typescript": "^5", + "tailwindcss": "^3.4.1", + "postcss": "^8" + } +} diff --git a/sites/ai-stack/postcss.config.mjs b/sites/ai-stack/postcss.config.mjs new file mode 100644 index 0000000..a06f589 --- /dev/null +++ b/sites/ai-stack/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/sites/ai-stack/public/avatar.jpeg b/sites/ai-stack/public/avatar.jpeg new file mode 100644 index 0000000..5f84d25 Binary files /dev/null and b/sites/ai-stack/public/avatar.jpeg differ diff --git a/sites/ai-stack/public/banner.png b/sites/ai-stack/public/banner.png new file mode 100644 index 0000000..1913b5c Binary files /dev/null and b/sites/ai-stack/public/banner.png differ diff --git a/sites/ai-stack/public/icon-192.png b/sites/ai-stack/public/icon-192.png new file mode 100644 index 0000000..7c35646 Binary files /dev/null and b/sites/ai-stack/public/icon-192.png differ diff --git a/sites/ai-stack/public/icon-512.png b/sites/ai-stack/public/icon-512.png new file mode 100644 index 0000000..9dcae12 Binary files /dev/null and b/sites/ai-stack/public/icon-512.png differ diff --git a/sites/ai-stack/public/icon.svg b/sites/ai-stack/public/icon.svg new file mode 100644 index 0000000..4ec2deb --- /dev/null +++ b/sites/ai-stack/public/icon.svg @@ -0,0 +1 @@ +A diff --git a/sites/ai-stack/public/noise.webp b/sites/ai-stack/public/noise.webp new file mode 100644 index 0000000..8349904 Binary files /dev/null and b/sites/ai-stack/public/noise.webp differ diff --git a/sites/ai-stack/public/og-image.png b/sites/ai-stack/public/og-image.png new file mode 100644 index 0000000..6962af5 Binary files /dev/null and b/sites/ai-stack/public/og-image.png differ diff --git a/sites/ai-stack/public/robots.txt b/sites/ai-stack/public/robots.txt new file mode 100644 index 0000000..9f21055 --- /dev/null +++ b/sites/ai-stack/public/robots.txt @@ -0,0 +1,24 @@ +# robots.txt for Toolso.AI - AI Tools Directory +# https://toolso.ai + +User-agent: * +Allow: / + +# Disallow admin and API pages +Disallow: /admin/ +Disallow: /api/ + +# Disallow authentication pages +Disallow: /*/signup +Disallow: /*/login +Disallow: /*/check-email +Disallow: /*/verify-email +Disallow: /*/forgot-password +Disallow: /*/reset-password + +# Disallow protected user pages +Disallow: /*/dashboard +Disallow: /*/profile + +# Sitemap location +Sitemap: https://toolso.ai/sitemap.xml diff --git a/sites/ai-stack/public/skeleton-one.png b/sites/ai-stack/public/skeleton-one.png new file mode 100644 index 0000000..9734078 Binary files /dev/null and b/sites/ai-stack/public/skeleton-one.png differ diff --git a/sites/ai-stack/public/tyler.jpeg b/sites/ai-stack/public/tyler.jpeg new file mode 100644 index 0000000..667f0dc Binary files /dev/null and b/sites/ai-stack/public/tyler.jpeg differ diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/analytics/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/analytics/page.tsx new file mode 100644 index 0000000..0586ba2 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/analytics/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/analytics/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/analytics/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/categories/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/categories/page.tsx new file mode 100644 index 0000000..4b50d6c --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/categories/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/categories/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/categories/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/claims/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/claims/page.tsx new file mode 100644 index 0000000..a3fe61d --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/claims/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/claims/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/claims/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/discovery/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/discovery/page.tsx new file mode 100644 index 0000000..bb70237 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/discovery/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/discovery/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/discovery/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/page.tsx new file mode 100644 index 0000000..df0a27b --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/reviews/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/reviews/page.tsx new file mode 100644 index 0000000..a42f9ac --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/reviews/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/reviews/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/reviews/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/submissions/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/submissions/page.tsx new file mode 100644 index 0000000..7ff5ca4 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/submissions/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/submissions/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/submissions/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/tags/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/tags/page.tsx new file mode 100644 index 0000000..516f034 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/tags/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tags/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tags/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/tools/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/tools/page.tsx new file mode 100644 index 0000000..364ce24 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tools/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tools/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/users/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/users/page.tsx new file mode 100644 index 0000000..f6c4ba4 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/users/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/users/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/users/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/admin/votes/page.tsx b/sites/ai-stack/src/app/[locale]/(admin)/admin/votes/page.tsx new file mode 100644 index 0000000..32fd76c --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/admin/votes/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(admin)/admin/votes/page.tsx 的薄路由 +export const revalidate = 0; +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/votes/page"; diff --git a/sites/ai-stack/src/app/[locale]/(admin)/layout.tsx b/sites/ai-stack/src/app/[locale]/(admin)/layout.tsx new file mode 100644 index 0000000..d58cb83 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(admin)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/layout"; diff --git a/sites/ai-stack/src/app/[locale]/(auth)/forgot-password/page.tsx b/sites/ai-stack/src/app/[locale]/(auth)/forgot-password/page.tsx new file mode 100644 index 0000000..737bb95 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(auth)/forgot-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/forgot-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/forgot-password/page"; diff --git a/sites/ai-stack/src/app/[locale]/(auth)/layout.tsx b/sites/ai-stack/src/app/[locale]/(auth)/layout.tsx new file mode 100644 index 0000000..2d015d0 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(auth)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/layout"; diff --git a/sites/ai-stack/src/app/[locale]/(auth)/login/page.tsx b/sites/ai-stack/src/app/[locale]/(auth)/login/page.tsx new file mode 100644 index 0000000..524b156 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(auth)/login/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/login/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/login/page"; diff --git a/sites/ai-stack/src/app/[locale]/(auth)/reset-password/page.tsx b/sites/ai-stack/src/app/[locale]/(auth)/reset-password/page.tsx new file mode 100644 index 0000000..69c68f4 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(auth)/reset-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/reset-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/reset-password/page"; diff --git a/sites/ai-stack/src/app/[locale]/(auth)/signup/page.tsx b/sites/ai-stack/src/app/[locale]/(auth)/signup/page.tsx new file mode 100644 index 0000000..414f955 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(auth)/signup/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/signup/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/signup/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx new file mode 100644 index 0000000..1e24e74 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/[slug]/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/ai-tools-for/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/ai-tools-for/page.tsx new file mode 100644 index 0000000..e17e80b --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/ai-tools-for/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/best/[slug]/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/best/[slug]/page.tsx new file mode 100644 index 0000000..a4f396b --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/best/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/[slug]/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/best/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/best/page.tsx new file mode 100644 index 0000000..af741b7 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/best/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/blog/[slug]/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/blog/[slug]/page.tsx new file mode 100644 index 0000000..ddcaf5c --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/blog/[slug]/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/[slug]/page.tsx 的薄路由 +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/[slug]/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/blog/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/blog/page.tsx new file mode 100644 index 0000000..e0aaa51 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/blog/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/category/[slug]/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/category/[slug]/page.tsx new file mode 100644 index 0000000..67bc8b7 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/category/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/category/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/category/[slug]/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/contact/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/contact/page.tsx new file mode 100644 index 0000000..38cf0af --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/contact/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/contact/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/contact/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/cookies/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/cookies/page.tsx new file mode 100644 index 0000000..6e27f11 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/cookies/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/cookies/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/cookies/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/layout.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/layout.tsx new file mode 100644 index 0000000..0602321 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/layout.tsx @@ -0,0 +1,4 @@ +import { createMarketingLayout } from "@aidir/core/kit/create-marketing-layout"; +import { siteConfig } from "@/site/brand"; + +export default createMarketingLayout(siteConfig); diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/page.tsx new file mode 100644 index 0000000..0afcbb9 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/page.tsx @@ -0,0 +1,9 @@ +import { createHomePage, createHomeMetadata } from "@aidir/core/kit/create-home"; +import { siteConfig } from "@/site/brand"; +import { SiteHome } from "@/site/home"; + +// 首页内容变化不频繁,ISR 每小时再生 +export const revalidate = 3600; + +export const generateMetadata = createHomeMetadata(siteConfig); +export default createHomePage(siteConfig, SiteHome); diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/privacy/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/privacy/page.tsx new file mode 100644 index 0000000..ab85a20 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/privacy/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/privacy/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/privacy/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/rankings/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/rankings/page.tsx new file mode 100644 index 0000000..1b7854c --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/rankings/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/rankings/page.tsx 的薄路由 +export const revalidate = 1800; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/rankings/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/submit/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/submit/page.tsx new file mode 100644 index 0000000..5cd1d96 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/submit/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/submit/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/submit/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/terms/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/terms/page.tsx new file mode 100644 index 0000000..588ebc3 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/terms/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/terms/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/terms/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/tools/[slug]/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/tools/[slug]/page.tsx new file mode 100644 index 0000000..c88bbd2 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/tools/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/tools/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/[slug]/page"; diff --git a/sites/ai-stack/src/app/[locale]/(marketing)/tools/page.tsx b/sites/ai-stack/src/app/[locale]/(marketing)/tools/page.tsx new file mode 100644 index 0000000..ef24d90 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(marketing)/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/tools/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/page"; diff --git a/sites/ai-stack/src/app/[locale]/(protected)/dashboard/page.tsx b/sites/ai-stack/src/app/[locale]/(protected)/dashboard/page.tsx new file mode 100644 index 0000000..20940ed --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(protected)/dashboard/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/dashboard/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/dashboard/page"; diff --git a/sites/ai-stack/src/app/[locale]/(protected)/layout.tsx b/sites/ai-stack/src/app/[locale]/(protected)/layout.tsx new file mode 100644 index 0000000..9e15378 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(protected)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/layout"; diff --git a/sites/ai-stack/src/app/[locale]/(protected)/profile/page.tsx b/sites/ai-stack/src/app/[locale]/(protected)/profile/page.tsx new file mode 100644 index 0000000..cf5ba66 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/(protected)/profile/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/profile/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/profile/page"; diff --git a/sites/ai-stack/src/app/[locale]/check-email/page.tsx b/sites/ai-stack/src/app/[locale]/check-email/page.tsx new file mode 100644 index 0000000..0cf4d63 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/check-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/check-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/check-email/page"; diff --git a/sites/ai-stack/src/app/[locale]/layout.tsx b/sites/ai-stack/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..5141337 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/layout.tsx 的薄路由 +export { default, generateStaticParams } from "@aidir/core/pages/[locale]/layout"; diff --git a/sites/ai-stack/src/app/[locale]/verify-email/page.tsx b/sites/ai-stack/src/app/[locale]/verify-email/page.tsx new file mode 100644 index 0000000..28f07f2 --- /dev/null +++ b/sites/ai-stack/src/app/[locale]/verify-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/verify-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/verify-email/page"; diff --git a/sites/ai-stack/src/app/api/auth/[...all]/route.ts b/sites/ai-stack/src/app/api/auth/[...all]/route.ts new file mode 100644 index 0000000..3ad325b --- /dev/null +++ b/sites/ai-stack/src/app/api/auth/[...all]/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/[...all]/route.ts 的薄路由 +export { POST, GET } from "@aidir/core/pages/api/auth/[...all]/route"; diff --git a/sites/ai-stack/src/app/api/auth/forgot-password/route.ts b/sites/ai-stack/src/app/api/auth/forgot-password/route.ts new file mode 100644 index 0000000..04090fd --- /dev/null +++ b/sites/ai-stack/src/app/api/auth/forgot-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/forgot-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/forgot-password/route"; diff --git a/sites/ai-stack/src/app/api/auth/resend-verification/route.ts b/sites/ai-stack/src/app/api/auth/resend-verification/route.ts new file mode 100644 index 0000000..4e8ce70 --- /dev/null +++ b/sites/ai-stack/src/app/api/auth/resend-verification/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/resend-verification/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/resend-verification/route"; diff --git a/sites/ai-stack/src/app/api/auth/reset-password/route.ts b/sites/ai-stack/src/app/api/auth/reset-password/route.ts new file mode 100644 index 0000000..652eba4 --- /dev/null +++ b/sites/ai-stack/src/app/api/auth/reset-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/reset-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/reset-password/route"; diff --git a/sites/ai-stack/src/app/api/auth/verify-email/route.ts b/sites/ai-stack/src/app/api/auth/verify-email/route.ts new file mode 100644 index 0000000..c658aab --- /dev/null +++ b/sites/ai-stack/src/app/api/auth/verify-email/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-email/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-email/route"; diff --git a/sites/ai-stack/src/app/api/auth/verify-reset-token/route.ts b/sites/ai-stack/src/app/api/auth/verify-reset-token/route.ts new file mode 100644 index 0000000..02b6c76 --- /dev/null +++ b/sites/ai-stack/src/app/api/auth/verify-reset-token/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-reset-token/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-reset-token/route"; diff --git a/sites/ai-stack/src/app/api/newsletter/unsubscribe/route.ts b/sites/ai-stack/src/app/api/newsletter/unsubscribe/route.ts new file mode 100644 index 0000000..5bee9b9 --- /dev/null +++ b/sites/ai-stack/src/app/api/newsletter/unsubscribe/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/newsletter/unsubscribe/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/newsletter/unsubscribe/route"; diff --git a/sites/ai-stack/src/app/api/outbound/route.ts b/sites/ai-stack/src/app/api/outbound/route.ts new file mode 100644 index 0000000..fa3a252 --- /dev/null +++ b/sites/ai-stack/src/app/api/outbound/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/outbound/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/outbound/route"; diff --git a/sites/ai-stack/src/app/api/search/route.ts b/sites/ai-stack/src/app/api/search/route.ts new file mode 100644 index 0000000..d3f1006 --- /dev/null +++ b/sites/ai-stack/src/app/api/search/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/search/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/search/route"; diff --git a/sites/ai-stack/src/app/api/tools/[id]/vote/route.ts b/sites/ai-stack/src/app/api/tools/[id]/vote/route.ts new file mode 100644 index 0000000..56e4b5f --- /dev/null +++ b/sites/ai-stack/src/app/api/tools/[id]/vote/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/tools/[id]/vote/route.ts 的薄路由 +export { POST, DELETE } from "@aidir/core/pages/api/tools/[id]/vote/route"; diff --git a/sites/ai-stack/src/app/api/upload/image/route.ts b/sites/ai-stack/src/app/api/upload/image/route.ts new file mode 100644 index 0000000..bce8a93 --- /dev/null +++ b/sites/ai-stack/src/app/api/upload/image/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/image/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/image/route"; diff --git a/sites/ai-stack/src/app/api/upload/simple/route.ts b/sites/ai-stack/src/app/api/upload/simple/route.ts new file mode 100644 index 0000000..665aa2b --- /dev/null +++ b/sites/ai-stack/src/app/api/upload/simple/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/simple/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/simple/route"; diff --git a/sites/ai-stack/src/app/api/user/admin-status/route.ts b/sites/ai-stack/src/app/api/user/admin-status/route.ts new file mode 100644 index 0000000..46244da --- /dev/null +++ b/sites/ai-stack/src/app/api/user/admin-status/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/admin-status/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/admin-status/route"; diff --git a/sites/ai-stack/src/app/api/user/profile/route.ts b/sites/ai-stack/src/app/api/user/profile/route.ts new file mode 100644 index 0000000..3ddc7ff --- /dev/null +++ b/sites/ai-stack/src/app/api/user/profile/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/profile/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/profile/route"; diff --git a/sites/ai-stack/src/app/layout.tsx b/sites/ai-stack/src/app/layout.tsx new file mode 100644 index 0000000..01115cc --- /dev/null +++ b/sites/ai-stack/src/app/layout.tsx @@ -0,0 +1,3 @@ +import "@aidir/core/styles/globals.css"; + +export { default } from "@aidir/core/pages/app-layout"; diff --git a/sites/ai-stack/src/app/manifest.ts b/sites/ai-stack/src/app/manifest.ts new file mode 100644 index 0000000..c7fc70b --- /dev/null +++ b/sites/ai-stack/src/app/manifest.ts @@ -0,0 +1,2 @@ +// 自动生成:manifest.ts 的薄路由 +export { default } from "@aidir/core/pages/manifest"; diff --git a/sites/ai-stack/src/app/not-found.tsx b/sites/ai-stack/src/app/not-found.tsx new file mode 100644 index 0000000..cb56be7 --- /dev/null +++ b/sites/ai-stack/src/app/not-found.tsx @@ -0,0 +1,2 @@ +// 自动生成:not-found.tsx 的薄路由 +export { default } from "@aidir/core/pages/not-found"; diff --git a/sites/ai-stack/src/app/sitemap.ts b/sites/ai-stack/src/app/sitemap.ts new file mode 100644 index 0000000..c773151 --- /dev/null +++ b/sites/ai-stack/src/app/sitemap.ts @@ -0,0 +1,2 @@ +// 自动生成:sitemap.ts 的薄路由 +export { default } from "@aidir/core/pages/sitemap"; diff --git a/sites/ai-stack/src/i18n/request.ts b/sites/ai-stack/src/i18n/request.ts new file mode 100644 index 0000000..48fd29b --- /dev/null +++ b/sites/ai-stack/src/i18n/request.ts @@ -0,0 +1,37 @@ +import { getRequestConfig } from "next-intl/server"; +import { notFound } from "next/navigation"; +import { locales, defaultLocale, type Locale } from "@aidir/core/i18n.config"; + +/** 站点品牌 SEO 文案覆盖(每个网站不同) */ +const brandMessages = { + en: { + seo: { home: {"title":"AI Stack — Find the Best AI Tools, Ranked by Real Users","description":"The professional AI tools directory. 1,000+ AI tools across 14 categories ranked by community votes, reviews and engagement.","ogImage":"/og-image.png"} }, + hero: { title: "AI Stack — Find the Best AI Tools, Ranked by Real Users", description: "The professional AI tools directory. 1,000+ AI tools across 14 categories ranked by community votes, reviews and engagement." }, + common: { brand: { name: "AI Stack", tagline: "The professional AI tools directory — ranked by the community." } }, + }, + zh: { + seo: { home: {"title":"AI Stack — 由真实用户排名的 AI 工具目录","description":"专业 AI 工具导航:14 个分类、1000+ 工具,由社区投票、评论与互动数据实时排名。","ogImage":"/og-image.png"} }, + hero: { title: "AI Stack — 由真实用户排名的 AI 工具目录", description: "专业 AI 工具导航:14 个分类、1000+ 工具,由社区投票、评论与互动数据实时排名。" }, + common: { brand: { name: "AI Stack", tagline: "The professional AI tools directory — ranked by the community." } }, + }, +} as const; + +export default getRequestConfig(async ({ requestLocale }) => { + let locale = await requestLocale; + if (!locale || !locales.includes(locale as Locale)) { + locale = defaultLocale; + } + try { + // 底座基础文案 + 站点品牌覆盖(浅合并到顶层命名空间) + const base = (await import(`../../messages/${locale}.json`)).default; + const override = brandMessages[locale as keyof typeof brandMessages]; + const messages = { ...base }; + for (const [ns, value] of Object.entries(override)) { + messages[ns] = { ...(messages[ns] ?? {}), ...value }; + } + return { locale, messages }; + } catch (error) { + console.error("Error loading messages for locale:", locale, error); + notFound(); + } +}); diff --git a/sites/ai-stack/src/proxy.ts b/sites/ai-stack/src/proxy.ts new file mode 100644 index 0000000..eec3c1e --- /dev/null +++ b/sites/ai-stack/src/proxy.ts @@ -0,0 +1,10 @@ +import { proxy } from "@aidir/core/proxy"; + +export default proxy; + +export const config = { + matcher: [ + "/", + "/((?!api|_next|_vercel|.*\\..*).*)" + ] +}; diff --git a/sites/ai-stack/src/site/brand.tsx b/sites/ai-stack/src/site/brand.tsx new file mode 100644 index 0000000..439d473 --- /dev/null +++ b/sites/ai-stack/src/site/brand.tsx @@ -0,0 +1,107 @@ +import type { SiteConfig } from "@/kit/types"; + +// AI Stack —— 独立站点的全部品牌/导航/页脚配置 +export const siteConfig: SiteConfig = { + "port": 3001, + "brand": { + "name": "AI Stack", + "tagline": "The professional AI tools directory — ranked by the community.", + "headline": "Find the best AI tools, ranked by real users", + "subheadline": "1,000+ AI tools across 14 categories. Compare votes, reviews and pricing to pick the right one." + }, + "navItems": [ + { + "label": "Discover", + "href": "/tools" + }, + { + "label": "Use Cases", + "href": "/ai-tools-for" + }, + { + "label": "Best Lists", + "href": "/best" + }, + { + "label": "Rankings", + "href": "/rankings" + }, + { + "label": "Blog", + "href": "/blog" + }, + { + "label": "Submit", + "href": "/submit" + } + ], + "footerGroups": [ + { + "title": "Discover", + "links": [ + { + "label": "All Tools", + "href": "/tools" + }, + { + "label": "Use Cases", + "href": "/ai-tools-for" + }, + { + "label": "Best Lists", + "href": "/best" + }, + { + "label": "Rankings", + "href": "/rankings" + } + ] + }, + { + "title": "Community", + "links": [ + { + "label": "Submit a Tool", + "href": "/submit" + }, + { + "label": "Blog", + "href": "/blog" + }, + { + "label": "Dashboard", + "href": "/dashboard" + } + ] + }, + { + "title": "Legal", + "links": [ + { + "label": "Terms", + "href": "/terms" + }, + { + "label": "Privacy", + "href": "/privacy" + }, + { + "label": "Contact", + "href": "/contact" + } + ] + } + ], + "searchPlaceholder": "Search AI tools...", + "seo": { + "en": { + "title": "AI Stack — Find the Best AI Tools, Ranked by Real Users", + "description": "The professional AI tools directory. 1,000+ AI tools across 14 categories ranked by community votes, reviews and engagement." + }, + "zh": { + "title": "AI Stack — 由真实用户排名的 AI 工具目录", + "description": "专业 AI 工具导航:14 个分类、1000+ 工具,由社区投票、评论与互动数据实时排名。" + } + }, + "id": "ai-stack" +}; diff --git a/sites/ai-stack/src/site/home.tsx b/sites/ai-stack/src/site/home.tsx new file mode 100644 index 0000000..0e542ea --- /dev/null +++ b/sites/ai-stack/src/site/home.tsx @@ -0,0 +1,277 @@ +// 自动生成:站点首页组件(源自底座 classic 形态,品牌来自 @/site/brand) +import { siteConfig } from "@/site/brand"; +import { Search, TrendingUp, Sparkles, Clock, Award, LayoutGrid, MessageSquareQuote } from "lucide-react"; +import { ToolCard, ToolCardGrid } from "@/components/tool-card"; +import { LocaleLink } from "@/components/locale-link"; +import { SectionHeader } from "@/kit/section"; +import { ThemeHeader } from "@/kit/theme-header"; +import { ThemeFooter } from "@/kit/theme-footer"; +import { getHomeDataSafe } from "@/kit/home-data"; + +/** Classic:专业 AI Directory(Clean / Dense / Professional) */ + + +const navItems = [ + { label: "Discover", href: "/tools" }, + { label: "Categories", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Best Lists", href: "/best" }, + { label: "Rankings", href: "/rankings" }, + { label: "Blog", href: "/blog" }, + { label: "Submit", href: "/submit" }, +]; + +const footerGroups = [ + { + title: "Discover", + links: [ + { label: "All Tools", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Best Lists", href: "/best" }, + { label: "Rankings", href: "/rankings" }, + ], + }, + { + title: "Community", + links: [ + { label: "Submit a Tool", href: "/submit" }, + { label: "Blog", href: "/blog" }, + { label: "Dashboard", href: "/dashboard" }, + ], + }, + { + title: "Legal", + links: [ + { label: "Terms", href: "/terms" }, + { label: "Privacy", href: "/privacy" }, + { label: "Contact", href: "/contact" }, + ], + }, +]; + +async function SiteHome({ locale }: { locale: string }) { + const data = await getHomeDataSafe(8); + + return ( +
+ {/* Hero */} +
+
+

+ {siteConfig.brand.headline} +

+

+ {siteConfig.brand.subheadline} +

+
+
+ + + +
+
+
+ Popular: + {["writing", "video", "coding", "image"].map((q) => ( + + {q} + + ))} +
+
+
+ +
+ {/* Trending */} + {data.trending.length > 0 && ( +
+ + +
+ )} + + {/* Categories */} + {data.categories.length > 0 && ( +
+ +
+ {data.categories.slice(0, 10).map((category) => ( + + +

+ {locale === "zh" && category.nameZh + ? category.nameZh + : category.nameEn} +

+

+ {category.toolCount} tools +

+
+ ))} +
+
+ )} + + {/* New + Editor's Choice 两列 */} +
+ {data.newest.length > 0 && ( +
+ + +
+ )} + {data.editorsChoice.length > 0 && ( +
+ + +
+ )} +
+ + {/* Use Cases */} + {data.useCases.length > 0 && ( +
+ +
+ {data.useCases.slice(0, 12).map((uc) => ( + + {locale === "zh" && uc.nameZh ? uc.nameZh : uc.nameEn} + + {uc.toolCount} + + + ))} +
+
+ )} + + {/* Best Lists */} + {data.collections.length > 0 && ( +
+ +
+ {data.collections.slice(0, 3).map((col) => ( + + +

+ {locale === "zh" && col.nameZh ? col.nameZh : col.nameEn} +

+

+ {locale === "zh" && col.introZh ? col.introZh : col.introEn} +

+

+ {col.toolCount} tools +

+
+ ))} +
+
+ )} + + {/* Latest Reviews */} + {data.latestReviews.length > 0 && ( +
+ +
+ {data.latestReviews.map((review, i) => ( + +
+ + + {review.authorName} + + + on {review.toolName} + + + {review.rating}/5 + +
+

+ {review.content} +

+
+ ))} +
+
+ )} + + {/* Submit CTA */} +
+ +

+ Built an AI tool? +

+

+ Submit it to {siteConfig.brand.name} and get discovered by thousands of users + looking for tools like yours. +

+ + + Submit your tool + +
+
+
+ ); +} + +export { SiteHome }; diff --git a/sites/ai-stack/tailwind.config.ts b/sites/ai-stack/tailwind.config.ts new file mode 100644 index 0000000..c4729ec --- /dev/null +++ b/sites/ai-stack/tailwind.config.ts @@ -0,0 +1,11 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./src/**/*.{js,ts,jsx,tsx,mdx}", + "../../packages/core/src/**/*.{js,ts,jsx,tsx,mdx}", + ], + presets: [require("../../packages/core/tailwind.preset.cjs")], +}; + +export default config; diff --git a/sites/ai-stack/tsconfig.json b/sites/ai-stack/tsconfig.json new file mode 100644 index 0000000..95fd293 --- /dev/null +++ b/sites/ai-stack/tsconfig.json @@ -0,0 +1,64 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./src/*", + "../../packages/core/src/*" + ], + "@aidir/core/pages/*": [ + "../../packages/core/src/pages/*" + ], + "@aidir/core/kit/*": [ + "../../packages/core/src/kit/*" + ], + "@aidir/core/src/*": [ + "../../packages/core/src/*" + ], + "@aidir/core/proxy": [ + "../../packages/core/src/proxy.ts" + ], + "@aidir/core/i18n.config": [ + "../../packages/core/src/i18n.config.ts" + ], + "@aidir/core/styles/globals.css": [ + "../../packages/core/src/styles/globals.css" + ], + "@aidir/core/*": [ + "../../packages/core/src/*", + "../../packages/core/*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/sites/devai-tools/.env.example b/sites/devai-tools/.env.example new file mode 100644 index 0000000..34b87e7 --- /dev/null +++ b/sites/devai-tools/.env.example @@ -0,0 +1,14 @@ +# DevAI.tools 环境变量(与底座共享同一套 PostgreSQL / Better Auth / Admin) +DATABASE_URL="postgresql://postgres:postgres@127.0.0.1:15433/ai_directory" +BETTER_AUTH_SECRET="dev-secret-ai-directory-platform-0123456789abcdef" +BETTER_AUTH_URL="http://localhost:3004" +AUTH_GOOGLE_ID="" +AUTH_GOOGLE_SECRET="" +NEXT_PUBLIC_AUTH_GOOGLE_ENABLED="false" +AUTH_GITHUB_ID="" +AUTH_GITHUB_SECRET="" +NEXT_PUBLIC_AUTH_GITHUB_ENABLED="false" +RESEND_API_KEY="" +RESEND_FROM_EMAIL="DevAI.tools " +NEXT_PUBLIC_APP_URL="http://localhost:3004" +NEXT_PUBLIC_APP_NAME="DevAI.tools" diff --git a/sites/devai-tools/.gitignore b/sites/devai-tools/.gitignore new file mode 100644 index 0000000..309faff --- /dev/null +++ b/sites/devai-tools/.gitignore @@ -0,0 +1,5 @@ +/node_modules +/.next +/.env*.local +next-env.d.ts +*.tsbuildinfo diff --git a/sites/devai-tools/mdx-components.tsx b/sites/devai-tools/mdx-components.tsx new file mode 100644 index 0000000..2a15d84 --- /dev/null +++ b/sites/devai-tools/mdx-components.tsx @@ -0,0 +1 @@ +export { useMDXComponents } from "@aidir/core/src/mdx-components"; diff --git a/sites/devai-tools/messages/en.json b/sites/devai-tools/messages/en.json new file mode 100644 index 0000000..cc0f7a8 --- /dev/null +++ b/sites/devai-tools/messages/en.json @@ -0,0 +1,796 @@ +{ + "common": { + "brand": { + "name": "DevAI.tools", + "tagline": "AI tools for developers — curated, tested, ranked by the community.", + "copyright": "Copyright © 2025", + "allRightsReserved": "All rights reserved" + }, + "actions": { + "signIn": "Sign in", + "signUp": "Sign Up", + "signOut": "Sign Out", + "getStarted": "Get Started", + "startFree": "Start Free", + "learnMore": "Learn More", + "viewAll": "View All", + "submit": "Submit", + "cancel": "Cancel", + "save": "Save", + "delete": "Delete", + "edit": "Edit", + "update": "Update", + "continue": "Continue", + "back": "Back", + "next": "Next", + "contactSales": "Contact Sales", + "startTrial": "Start Free Trial" + }, + "status": { + "loading": "Loading...", + "verified": "Verified", + "pending": "Pending", + "active": "Active", + "inactive": "Inactive" + } + }, + "navigation": { + "main": { + "tools": "Tools", + "blog": "Blog", + "contact": "Contact", + "dashboard": "Dashboard", + "profile": "Profile" + }, + "footer": { + "legal": { + "terms": "Terms of Service", + "privacy": "Privacy Policy", + "cookies": "Cookie Policy" + }, + "social": { + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "Discover the Best AI Tools", + "title": "DevAI.tools — AI Tools for Developers", + "description": "Code assistants, DevOps automation and testing copilots — the AI tools developers actually upvote, ranked daily.", + "cta": { + "primary": "Explore Tools", + "secondary": "Read Blog" + } + }, + "features": { + "title": "Everything You Need to Build Fast", + "subtitle": "Stop wasting time on boilerplate. Focus on your unique features while this template handles the foundation.", + "items": { + "aiOptimized": { + "title": "Modern Tech Stack", + "description": "Built with Next.js 14, TypeScript, Tailwind CSS, and PostgreSQL. Production-ready from day one." + }, + "zeroPipeline": { + "title": "Authentication Ready", + "description": "Email/password and Google OAuth configured. Session management and protected routes ready to use." + }, + "nonTechnical": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management. Monitor your users and manage permissions easily." + }, + "productionGrade": { + "title": "Blog System Included", + "description": "MDX-powered blog with i18n support. Create content in multiple languages with SEO optimization." + } + } + }, + "testimonials": { + "title": "Trusted by AI Enthusiasts", + "subtitle": "Join thousands of users discovering the best AI tools for their workflows.", + "items": [ + { + "name": "Sarah Chen", + "quote": "Toolso.AI helped me find the perfect AI writing assistant. The categorization makes discovery so easy!", + "designation": "Content Creator" + }, + { + "name": "Michael Park", + "quote": "Finally, a comprehensive AI tools directory that's well-organized. Saved me hours of research.", + "designation": "Product Manager" + }, + { + "name": "Emily Rodriguez", + "quote": "I discover new AI tools every week on Toolso.AI. It's become my go-to resource for AI exploration.", + "designation": "Startup Founder" + }, + { + "name": "David Kim", + "quote": "The search and filter features are incredibly helpful. Found exactly what I needed in minutes.", + "designation": "Software Engineer" + }, + { + "name": "Lisa Wang", + "quote": "Love the multilingual support! Makes it easy to explore AI tools in both English and Chinese.", + "designation": "Digital Marketer" + }, + { + "name": "James Liu", + "quote": "Great resource for staying up-to-date with the latest AI tools. The blog section is also very informative.", + "designation": "AI Researcher" + } + ] + }, + "companies": { + "title": "Built with Industry-Leading Technologies", + "subtitle": "Built on modern stack trusted by the world's best teams" + }, + "gridFeatures": { + "aiReady": { + "title": "Extensible Architecture", + "description": "Clean, modular code structure. Easy to add new features and integrations." + }, + "creem": { + "title": "Database Ready", + "description": "PostgreSQL with Drizzle ORM configured. Type-safe queries and migrations ready." + }, + "auth": { + "title": "Authentication System", + "description": "Better Auth with email/password and OAuth. Session management and protected routes ready." + }, + "deploy": { + "title": "One-Click Deploy", + "description": "Deploy to Vercel, Railway, or any platform instantly. Production-ready from day one." + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "Modern tech stack with Next.js 14, TypeScript, Tailwind CSS, and shadcn/ui components." + }, + "database": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management and system monitoring." + }, + "seo": { + "title": "SEO & Marketing", + "description": "Meta tags, Open Graph, sitemap, and analytics. Everything for organic growth." + }, + "vibeCoding": { + "title": "Blog System", + "description": "MDX-powered blog with multi-language support. Create content that ranks." + } + }, + "cta": { + "title": "Find Your Perfect AI Tool", + "description": "Browse our curated collection of AI tools and discover what works best for you.", + "button": "Explore Tools" + }, + "auth": { + "login": { + "title": "Sign in to your account", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "forgotPassword": "Forgot password?", + "noAccount": "Don't have an account?", + "signUpLink": "Sign Up", + "signInButton": "Sign in", + "signingIn": "Signing in...", + "errors": { + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "loginFailed": "Login failed. Please try again.", + "googleLoginFailed": "Google login failed. Please try again." + } + }, + "signup": { + "title": "Sign up for an account", + "nameLabel": "Full name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "hasAccount": "Already have an account?", + "signInLink": "Sign in", + "signUpButton": "Sign Up", + "signingUp": "Signing up...", + "errors": { + "nameRequired": "Please enter your name", + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "signupFailed": "Sign up failed. Please try again.", + "googleSignupFailed": "Google sign up failed. Please try again." + } + }, + "social": { + "googleSignIn": "Continue with Google", + "or": "Or continue with", + "githubSignIn": "Continue with GitHub" + }, + "checkEmail": { + "title": "Check Your Email", + "description": "We've sent a verification link to your email address. Please click the link to verify your account and get started.", + "notReceived": "Didn't receive the email?", + "checkSpam": "Check your spam or junk folder", + "checkEmailCorrect": "Make sure you entered the correct email", + "waitAndCheck": "Wait a few minutes and check again", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent successfully! Please check your inbox.", + "resendError": "Failed to resend verification email.", + "backToLogin": "Back to Login", + "securityNote": "For your security, the verification link will expire in 24 hours." + }, + "verifyEmail": { + "verifying": "Verifying Email", + "verifyingDescription": "Please wait while we verify your email address...", + "success": "Email Verified!", + "successDescription": "Your email has been successfully verified! Redirecting to login...", + "alreadyVerified": "Already Verified", + "failed": "Verification Failed", + "goToLogin": "Go to Login", + "backToSignUp": "Back to Sign Up", + "requestNew": "Request New Verification Email", + "checkSpamNote": "Check your spam folder if you don't see our emails" + }, + "emailVerifiedGuard": { + "title": "Email Verification Required", + "description": "Please verify your email address to access this page. Check your inbox for the verification link we sent to:", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent! Please check your inbox.", + "resendError": "Failed to send verification email. Please try again.", + "signOutLink": "Sign out and try a different account" + } + }, + "Admin": { + "sidebar": { + "title": "Admin Panel", + "subtitle": "System Management", + "dashboard": "Dashboard", + "tools": "Tools", + "categories": "Categories", + "tags": "Tags", + "users": "Users", + "backToDashboard": "Back to User Dashboard", + "submissions": "Submissions", + "claims": "Claims", + "reviews": "Reviews", + "discovery": "Discovery", + "votes": "Vote Audit", + "analytics": "Analytics" + }, + "header": { + "welcome": "Welcome", + "adminBadge": "Admin" + }, + "dashboard": { + "title": "Admin Dashboard", + "totalUsers": "Total Users", + "activeUsers": "Active Users", + "recentUsers": "Recent Users", + "viewAllUsers": "View All Users" + }, + "toolsManagement": { + "title": "Tools Management", + "totalCount": "{count} tools", + "searchPlaceholder": "Search tool name or slug...", + "allStatus": "All Status", + "published": "Published", + "draft": "Draft", + "addTool": "Add Tool", + "tool": "Tool", + "slug": "Slug", + "status": "Status", + "createdAt": "Created", + "actions": "Actions", + "noData": "No tools data", + "previous": "Previous", + "next": "Next", + "confirmDelete": "Are you sure you want to delete \"{name}\"? This action cannot be undone.", + "deleted": "Tool deleted", + "deleteFailed": "Delete failed", + "statusUpdated": "Status updated", + "statusUpdateFailed": "Status update failed", + "toDraft": "Set to draft", + "publish": "Publish", + "edit": "Edit", + "visitWebsite": "Visit website", + "delete": "Delete", + "modal": { + "editTitle": "Edit Tool", + "addTitle": "Add Tool", + "basicInfo": "Basic Information", + "linksAndImages": "Links & Images", + "categories": "Categories", + "tags": "Tags", + "slug": "Slug", + "status": "Status", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "domain": "Domain", + "websiteUrl": "Website URL", + "logoUrl": "Logo URL", + "coverImageUrl": "Cover Image URL", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTool": "Create Tool", + "requiredField": "Please fill in required fields", + "updated": "Tool updated", + "created": "Tool created", + "updateFailed": "Update failed", + "createFailed": "Create failed", + "statusDraft": "Draft", + "statusPublished": "Published", + "pricing": "Pricing", + "pricingNone": "Not set", + "pricingFree": "Free", + "pricingFreemium": "Freemium", + "pricingPaid": "Paid", + "featured": "Featured on homepage" + } + }, + "categoriesManagement": { + "title": "Categories Management", + "addCategory": "Add Category", + "order": "Order", + "category": "Category", + "slug": "Slug", + "toolCount": "Tools", + "toolCountLabel": "{count} tools", + "actions": "Actions", + "noData": "No categories data", + "edit": "Edit", + "delete": "Delete", + "cannotDelete": "This category has {count} tools, cannot delete", + "confirmDelete": "Are you sure you want to delete category \"{name}\"?", + "deleted": "Category deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Category", + "addTitle": "Add Category", + "slug": "Slug", + "icon": "Icon (emoji)", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "sortOrder": "Sort Order", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createCategory": "Create Category", + "requiredField": "Please fill in required fields", + "updated": "Category updated", + "created": "Category created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "tagsManagement": { + "title": "Tags Management", + "searchPlaceholder": "Search tags...", + "addTag": "Add Tag", + "toolCountLabel": "{count} tools", + "noData": "No tags data", + "edit": "Edit", + "delete": "Delete", + "confirmDeleteWithTools": "This tag is used by {count} tools. Deleting it will remove the tag from these tools. Continue?", + "confirmDelete": "Are you sure you want to delete tag \"{name}\"?", + "deleted": "Tag deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Tag", + "addTitle": "Add Tag", + "slug": "Slug", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTag": "Create Tag", + "requiredField": "Please fill in required fields", + "updated": "Tag updated", + "created": "Tag created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "users": { + "searchPlaceholder": "Search by name or email...", + "user": "User", + "role": "Role", + "status": "Status", + "joined": "Joined", + "actions": "Actions", + "admin": "Admin", + "banned": "Banned", + "active": "Active", + "unverified": "Unverified", + "verified": "Verified", + "emailVerified": "Email Verified", + "edit": "Edit", + "ban": "Ban", + "unban": "Unban", + "viewDetails": "View Details", + "banReason": "Ban Reason", + "banExpires": "Ban Expires", + "userDetails": "User Details", + "name": "Name", + "email": "Email", + "lastActive": "Last Active", + "close": "Close", + "roleUpdated": "Role updated successfully", + "roleUpdateFailed": "Failed to update role", + "userBanned": "User has been banned", + "userUnbanned": "User has been unbanned", + "banFailed": "Failed to ban/unban user", + "cancel": "Cancel", + "pagination": { + "previous": "Previous", + "next": "Next", + "page": "Page {current} of {total}" + } + } + }, + "dashboard": { + "title": "Dashboard", + "welcome": "Welcome back", + "cards": { + "personalInfo": { + "title": "Personal Info", + "labels": { + "name": "Name", + "email": "Email", + "status": "Status", + "notSet": "Not set" + } + }, + "quickActions": { + "title": "Quick Actions", + "editProfile": "Edit Profile", + "accountSettings": "Account Settings", + "securitySettings": "Security Settings" + } + }, + "favorites": { + "title": "My Favorites", + "empty": "No favorite tools yet.", + "browseTools": "Browse tools and save your favorites" + } + }, + "profile": { + "title": "Profile", + "subtitle": "Manage your account settings and preferences", + "sections": { + "basicInfo": { + "title": "Basic Information", + "fullName": "Full Name", + "email": "Email Address", + "verificationStatus": "Verification Status", + "notSet": "Not set", + "nameNotSet": "Name not set", + "accountId": "Account ID" + }, + "accountSettings": { + "title": "Account Settings", + "memberSince": "Member Since", + "lastLogin": "Last Login", + "accountType": "Account Type" + } + }, + "form": { + "nameLabel": "Name", + "namePlaceholder": "Enter your name", + "emailLabel": "Email", + "emailPlaceholder": "Enter your email", + "updateButton": "Update Profile", + "updating": "Updating...", + "updateSuccess": "Profile updated successfully!", + "updateError": "Failed to update profile. Please try again." + } + }, + "contact": { + "title": "Contact Us", + "subtitle": "We'd love to hear from you. Send us a message and we'll respond as soon as possible.", + "description": "Please reach out to us and we will get back to you shortly.", + "testimonial": { + "title": "We're here to help", + "description": "Our team is ready to assist you with any questions or feedback." + }, + "form": { + "nameLabel": "Full Name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "companyLabel": "Company", + "companyPlaceholder": "Your Company", + "messageLabel": "Message", + "messagePlaceholder": "Enter your message here", + "submitButton": "Submit", + "submitting": "Sending...", + "submitSuccess": "Message sent successfully!", + "submitError": "Failed to send message. Please try again." + } + }, + "blog": { + "title": "Blog", + "subtitle": "Latest insights and updates from our team", + "readMore": "Read More", + "minRead": "min read" + }, + "errors": { + "404": { + "title": "404 - Page Not Found", + "message": "The page you are looking for doesn't exist.", + "backHome": "Go to Homepage" + }, + "500": { + "title": "Something Went Wrong", + "message": "We're experiencing technical difficulties. Please try again later.", + "backHome": "Back to Home" + }, + "general": { + "title": "An Error Occurred", + "message": "Something unexpected happened. Please try again.", + "tryAgain": "Try Again" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "John Doe", + "designation": "Software Engineer" + }, + { + "name": "Jane Smith", + "designation": "Product Manager" + }, + { + "name": "Bob Johnson", + "designation": "Designer" + }, + { + "name": "Alice Brown", + "designation": "Developer" + } + ] + }, + "footer": { + "tagline": "Discover the best AI tools to boost your productivity.", + "product": { + "title": "Product", + "features": "Features", + "documentation": "Documentation" + }, + "company": { + "title": "Company", + "about": "About", + "blog": "Blog", + "careers": "Careers" + }, + "legal": { + "title": "Legal", + "privacy": "Privacy", + "terms": "Terms", + "cookies": "Cookies" + }, + "social": { + "title": "Social", + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + }, + "newsletter": { + "title": "Subscribe to Newsletter", + "description": "Get the latest updates and news directly in your inbox.", + "placeholder": "Enter your email", + "subscribe": "Subscribe", + "success": "Subscribed! Thanks for joining.", + "invalidEmail": "Please enter a valid email address.", + "error": "Subscription failed. Please try again." + } + }, + "tools": { + "title": "AI Tools Directory", + "subtitle": "Discover the best AI tools to boost your productivity", + "searchPlaceholder": "Search tools...", + "all": "All", + "foundTools": "Found {count} tools", + "visitWebsite": "Visit website", + "noTools": "No tools found", + "backToTools": "Back to tools", + "about": "About", + "categories": "Categories", + "tags": "Tags", + "visitButton": "Visit Website", + "toolInfo": "Tool Info", + "domain": "Domain", + "added": "Added", + "notFound": "Tool Not Found", + "favorites": { + "add": "Save to Favorites", + "remove": "Remove from Favorites", + "loginRequired": "Please sign in to save favorites", + "error": "Action failed. Please try again." + }, + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid" + }, + "categoryPage": { + "viewAll": "View all {count} tools" + }, + "reviewCta": "Ratings and reviews come from verified community members. Voted Helpful counts are shown next to each review.", + "alternatives": "Alternatives", + "seeAllAlternatives": "See all alternatives", + "stats": { + "votes": "Upvotes", + "views": "Views" + }, + "share": { + "share": "Share", + "copy": "Copy", + "copyLink": "Copy link", + "copied": "Link copied to clipboard" + }, + "sort": { + "latest": "Latest", + "trending": "Trending" + } + }, + "seo": { + "home": { + "title": "DevAI.tools — AI Tools for Developers", + "description": "Code assistants, DevOps automation and testing copilots — the AI tools developers actually upvote, ranked daily.", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "Blog - Toolso.AI", + "description": "Latest insights, tutorials and updates about AI tools. Stay informed about the best AI tools and industry trends.", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "Contact Us - Toolso.AI", + "description": "Get in touch with us. We'd love to hear your feedback and tool suggestions.", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "Login - Toolso.AI", + "description": "Sign in to your account to submit tools, save favorites, and contribute to our AI tools directory.", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "Sign Up - Toolso.AI", + "description": "Create your account and start contributing to our AI tools directory. Submit tools and join our community.", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "Terms of Service - Toolso.AI", + "description": "Read our terms of service to understand the rules and guidelines for using Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "Privacy Policy - Toolso.AI", + "description": "Learn how we collect, use, and protect your personal information and data on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie Policy - Toolso.AI", + "description": "Understand how we use cookies and similar tracking technologies on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI Tools Directory - Discover the Best AI Tools", + "description": "Explore our curated collection of AI tools. Find the best AI tools for productivity, creativity, and more." + } + }, + "featuredTools": { + "title": "Featured Tools", + "subtitle": "Curated collection of AI tools to boost your productivity", + "visitWebsite": "Visit website", + "empty": "No tools yet. Add some in the admin panel.", + "viewAll": "View All Tools" + }, + "voting": { + "vote": "Upvote", + "voted": "Upvoted", + "unvote": "Remove vote", + "loginRequired": "Please sign in to vote — you'll be brought right back.", + "rateLimited": "Slow down a bit — too many votes in a short time.", + "error": "Vote failed. Please try again." + }, + "reviews": { + "title": "Reviews", + "writeReview": "Write a review", + "empty": "No reviews yet — be the first to share your experience.", + "loadMore": "Load more", + "loading": "Loading...", + "helpful": "Helpful", + "verifiedUser": "Verified user", + "pros": "Pros", + "cons": "Cons", + "yourRating": "Your rating", + "ratingRequired": "Please pick a star rating first.", + "titlePlaceholder": "Sum it up in one line (optional)", + "contentPlaceholder": "What did you use it for? How well does it work?", + "prosPlaceholder": "What do you like about it?", + "consPlaceholder": "What could be better?", + "useCasePlaceholder": "Your use case (e.g. social media content)", + "saving": "Saving...", + "submit": "Publish review", + "update": "Update review", + "cancel": "Cancel", + "delete": "Delete my review", + "deleted": "Review deleted", + "tooShort": "Review is a bit short — tell us at least a sentence.", + "error": "Could not save your review. Please try again.", + "basedOn": "Based on {count} reviews" + }, + "submission": { + "name": "Tool name", + "websiteUrl": "Website URL", + "tagline": "Tagline", + "taglinePlaceholder": "One-line pitch shown on cards", + "description": "Description", + "descriptionPlaceholder": "What does it do? Who is it for? What makes it different?", + "logoUrl": "Logo URL", + "category": "Category", + "pricingLabel": "Pricing model", + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid", + "freeTrial": "Free Trial", + "openSource": "Open Source", + "contact": "Contact for pricing" + }, + "founderName": "Founder / company", + "contactEmail": "Contact email", + "socialLinks": "Social links", + "note": "Notes for the editors", + "notePlaceholder": "Anything that helps us review faster (launch date, metrics...)", + "selectPlaceholder": "Select...", + "submit": "Submit for review", + "submitting": "Submitting...", + "submitted": "Submitted! We'll review it within 48 hours.", + "reviewNote": "Free listing · reviewed within 48h", + "duplicateFound": "Looks like this tool may already be listed:", + "duplicateBlocked": "This tool appears to be already listed. Duplicate submissions are not allowed.", + "error": "Submission failed. Please check your inputs." + }, + "claim": { + "claimThisTool": "Claim this tool", + "verifiedOwner": "Verified owner", + "formTitle": "Claim ownership of this listing", + "rolePlaceholder": "Your role (e.g. Founder, Marketing lead)", + "messagePlaceholder": "How should we verify you? (same-domain email, press page...)", + "proofPlaceholder": "Proof URL (optional)", + "submit": "Send claim", + "submitting": "Sending...", + "submitted": "Claim sent! We'll review it shortly.", + "pendingExists": "You already have a pending claim for this tool.", + "cancel": "Cancel", + "error": "Could not send your claim." + }, + "rankings": { + "title": "Community Rankings", + "subtitle": "Seven live leaderboards powered by votes, reviews, saves and engagement — not sponsored placement.", + "trending": "Trending", + "popular": "Popular", + "mostVoted": "Most Voted", + "mostSaved": "Most Saved", + "highestRated": "Highest Rated", + "new": "New", + "editorsChoice": "Editor's Choice", + "empty": "No tools on this board yet." + } +} diff --git a/sites/devai-tools/messages/zh.json b/sites/devai-tools/messages/zh.json new file mode 100644 index 0000000..0853861 --- /dev/null +++ b/sites/devai-tools/messages/zh.json @@ -0,0 +1,804 @@ +{ + "common": { + "brand": { + "name": "DevAI.tools", + "tagline": "AI tools for developers — curated, tested, ranked by the community.", + "copyright": "版权所有 © 2025", + "allRightsReserved": "保留所有权利" + }, + "actions": { + "signIn": "登录", + "signUp": "注册", + "signOut": "退出登录", + "getStarted": "开始使用", + "startFree": "免费开始", + "startTrial": "开始试用", + "contactSales": "联系销售", + "learnMore": "了解更多", + "viewAll": "查看全部", + "submit": "提交", + "cancel": "取消", + "save": "保存", + "delete": "删除", + "edit": "编辑", + "update": "更新", + "continue": "继续", + "back": "返回", + "next": "下一步" + }, + "status": { + "loading": "加载中...", + "verified": "已验证", + "pending": "待处理", + "active": "已激活", + "inactive": "未激活" + } + }, + "navigation": { + "main": { + "tools": "工具库", + "blog": "博客", + "contact": "联系我们", + "dashboard": "仪表盘", + "profile": "个人资料" + }, + "footer": { + "legal": { + "terms": "服务条款", + "privacy": "隐私政策", + "cookies": "Cookie 政策" + }, + "social": { + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "发现最好的 AI 工具", + "title": "DevAI.tools — 开发者 AI 工具", + "description": "面向开发者的 AI 工具目录:代码助手、运维自动化、测试副驾驶,由社区每日排名。", + "cta": { + "primary": "探索工具", + "secondary": "阅读博客" + } + }, + "features": { + "title": "开始构建所需的一切", + "subtitle": "告别重复的样板代码。专注于你的独特功能,基础设施已为你准备就绪。", + "items": { + "aiOptimized": { + "title": "现代技术栈", + "description": "基于 Next.js 14、TypeScript、Tailwind CSS 和 PostgreSQL 构建。采用行业最佳实践和企业级架构。" + }, + "zeroPipeline": { + "title": "开箱即用的认证", + "description": "Better Auth 驱动的完整认证系统,支持邮箱密码和 OAuth 登录、邮箱验证、密码重置和会话管理。" + }, + "nonTechnical": { + "title": "管理后台", + "description": "功能齐全的管理面板,包含用户管理、角色权限控制和业务数据监控。轻松扩展满足你的需求。" + }, + "productionGrade": { + "title": "博客系统", + "description": "内置 MDX 博客系统,支持语法高亮、SEO 优化和国际化。非常适合内容营销和产品更新。" + } + } + }, + "testimonials": { + "title": "用户评价", + "subtitle": "来自使用 Toolso.AI 发现优质 AI 工具的真实用户反馈。", + "items": [ + { + "name": "张伟", + "quote": "Toolso.AI 帮我找到了完美的 AI 写作助手,分类清晰让发现变得非常简单!", + "designation": "内容创作者" + }, + { + "name": "王强", + "quote": "终于有了一个组织良好的 AI 工具目录,节省了我大量的研究时间。", + "designation": "产品经理" + }, + { + "name": "李娜", + "quote": "每周都能在 Toolso.AI 上发现新的 AI 工具,已经成为我探索 AI 的首选资源。", + "designation": "创业者" + }, + { + "name": "陈婷", + "quote": "搜索和筛选功能非常好用,几分钟就找到了我需要的工具。", + "designation": "软件工程师" + }, + { + "name": "赵明", + "quote": "喜欢中英文双语支持!可以轻松探索各种 AI 工具。", + "designation": "数字营销专家" + }, + { + "name": "朱悦", + "quote": "了解最新 AI 工具的好资源,博客板块也很有价值。", + "designation": "AI 研究员" + } + ] + }, + "companies": { + "title": "采用行业领先技术构建", + "subtitle": "基于现代技术栈,被全球顶尖团队信赖" + }, + "gridFeatures": { + "aiReady": { + "title": "可扩展架构", + "description": "模块化设计,轻松添加新功能。遵循 Next.js 最佳实践,便于维护。" + }, + "creem": { + "title": "邮件系统", + "description": "集成 Resend 邮件服务,支持交易邮件、验证邮件和新闻通讯。" + }, + "auth": { + "title": "身份认证", + "description": "Better Auth 提供邮箱密码和 OAuth 支持。会话管理和路由保护已就绪。" + }, + "deploy": { + "title": "一键部署", + "description": "即刻部署到 Vercel、Railway 或任何平台。从第一天起即可投入生产。" + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "现代技术栈包括 Next.js 14、TypeScript、Tailwind CSS 和 shadcn/ui 组件。" + }, + "database": { + "title": "数据库 + ORM", + "description": "PostgreSQL 配合 Drizzle ORM。类型安全的查询和迁移已配置。" + }, + "seo": { + "title": "SEO 和营销", + "description": "元标签、Open Graph、站点地图和分析。为有机增长准备的一切。" + }, + "vibeCoding": { + "title": "国际化支持", + "description": "内置中英文支持,使用 next-intl 实现。轻松添加更多语言。" + } + }, + "cta": { + "title": "找到最适合你的 AI 工具", + "description": "浏览精选 AI 工具集合,发现能帮助你提升效率的最佳工具。", + "button": "探索工具" + }, + "auth": { + "login": { + "title": "登录您的账户", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "forgotPassword": "忘记密码?", + "noAccount": "还没有账户?", + "signUpLink": "注册", + "signInButton": "登录", + "signingIn": "登录中...", + "errors": { + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "loginFailed": "登录失败,请重试。", + "googleLoginFailed": "Google 登录失败,请重试。" + } + }, + "signup": { + "title": "注册一个新账户", + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "hasAccount": "已经有账户了?", + "signInLink": "登录", + "signUpButton": "注册", + "signingUp": "注册中...", + "errors": { + "nameRequired": "请输入您的姓名", + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "signupFailed": "注册失败,请重试。", + "googleSignupFailed": "Google 注册失败,请重试。" + } + }, + "social": { + "googleSignIn": "使用 Google 继续", + "or": "或者继续使用", + "githubSignIn": "使用 GitHub 登录" + }, + "checkEmail": { + "title": "请查收您的邮件", + "description": "我们已向您的邮箱发送了验证链接。请点击链接验证您的账户并开始使用。", + "notReceived": "没有收到邮件?", + "checkSpam": "检查垃圾邮件文件夹", + "checkEmailCorrect": "确认输入的邮箱地址是否正确", + "waitAndCheck": "等待几分钟后再次查看", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件发送成功!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "backToLogin": "返回登录", + "securityNote": "为了您的安全,验证链接将在24小时后失效。" + }, + "verifyEmail": { + "verifying": "正在验证邮箱", + "verifyingDescription": "请稍候,我们正在验证您的邮箱地址...", + "success": "邮箱验证成功!", + "successDescription": "您的邮箱已成功验证!正在跳转到登录页面...", + "alreadyVerified": "已验证", + "failed": "验证失败", + "goToLogin": "前往登录", + "backToSignUp": "返回注册", + "requestNew": "重新发送验证邮件", + "checkSpamNote": "如果没有收到邮件,请检查垃圾邮件文件夹" + }, + "emailVerifiedGuard": { + "title": "需要验证邮箱", + "description": "请验证您的邮箱地址以访问此页面。请查收我们发送到以下邮箱的验证链接:", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件已发送!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "signOutLink": "退出并使用其他账户" + } + }, + "Admin": { + "sidebar": { + "title": "管理后台", + "subtitle": "系统管理", + "dashboard": "仪表板", + "tools": "工具管理", + "categories": "分类管理", + "tags": "标签管理", + "users": "用户管理", + "backToDashboard": "返回用户面板", + "submissions": "提交审核", + "claims": "认领审核", + "reviews": "评论审核", + "discovery": "发现管理", + "votes": "投票审计", + "analytics": "数据分析" + }, + "header": { + "welcome": "欢迎", + "adminBadge": "管理员" + }, + "dashboard": { + "title": "管理员仪表板", + "totalUsers": "总用户数", + "activeUsers": "活跃用户", + "recentUsers": "最近注册用户", + "viewAllUsers": "查看所有用户" + }, + "toolsManagement": { + "title": "工具管理", + "totalCount": "共 {count} 个工具", + "searchPlaceholder": "搜索工具名称或 slug...", + "allStatus": "全部状态", + "published": "已发布", + "draft": "草稿", + "addTool": "添加工具", + "tool": "工具", + "slug": "Slug", + "status": "状态", + "createdAt": "创建时间", + "actions": "操作", + "noData": "暂无工具数据", + "previous": "上一页", + "next": "下一页", + "confirmDelete": "确定要删除工具 \"{name}\" 吗?此操作不可恢复。", + "deleted": "工具已删除", + "deleteFailed": "删除失败", + "statusUpdated": "状态已更新", + "statusUpdateFailed": "状态更新失败", + "toDraft": "转为草稿", + "publish": "发布", + "edit": "编辑", + "visitWebsite": "访问网站", + "delete": "删除", + "modal": { + "editTitle": "编辑工具", + "addTitle": "添加工具", + "basicInfo": "基本信息", + "linksAndImages": "链接和图片", + "categories": "分类", + "tags": "标签", + "slug": "Slug", + "status": "状态", + "nameEn": "英文名称", + "nameZh": "中文名称", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "domain": "域名", + "websiteUrl": "网站链接", + "logoUrl": "Logo URL", + "coverImageUrl": "封面图 URL", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTool": "创建工具", + "requiredField": "请填写必填字段", + "updated": "工具已更新", + "created": "工具已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败", + "statusDraft": "草稿", + "statusPublished": "已发布", + "pricing": "定价", + "pricingNone": "未设置", + "pricingFree": "免费", + "pricingFreemium": "免费增值", + "pricingPaid": "付费", + "featured": "首页精选" + } + }, + "categoriesManagement": { + "title": "分类管理", + "addCategory": "添加分类", + "order": "排序", + "category": "分类", + "slug": "Slug", + "toolCount": "工具数", + "toolCountLabel": "{count} 个工具", + "actions": "操作", + "noData": "暂无分类数据", + "edit": "编辑", + "delete": "删除", + "cannotDelete": "该分类下有 {count} 个工具,无法删除", + "confirmDelete": "确定要删除分类 \"{name}\" 吗?", + "deleted": "分类已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑分类", + "addTitle": "添加分类", + "slug": "Slug", + "icon": "图标 (emoji)", + "nameEn": "英文名称", + "nameZh": "中文名称", + "sortOrder": "排序", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createCategory": "创建分类", + "requiredField": "请填写必填字段", + "updated": "分类已更新", + "created": "分类已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "tagsManagement": { + "title": "标签管理", + "searchPlaceholder": "搜索标签...", + "addTag": "添加标签", + "toolCountLabel": "{count} 个工具", + "noData": "暂无标签数据", + "edit": "编辑", + "delete": "删除", + "confirmDeleteWithTools": "该标签被 {count} 个工具使用,删除后这些工具将失去该标签。确定要删除吗?", + "confirmDelete": "确定要删除标签 \"{name}\" 吗?", + "deleted": "标签已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑标签", + "addTitle": "添加标签", + "slug": "Slug", + "nameEn": "英文名称", + "nameZh": "中文名称", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTag": "创建标签", + "requiredField": "请填写必填字段", + "updated": "标签已更新", + "created": "标签已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "users": { + "searchPlaceholder": "搜索用户姓名或邮箱...", + "user": "用户", + "role": "角色", + "status": "状态", + "joined": "加入时间", + "actions": "操作", + "admin": "管理员", + "banned": "已禁用", + "active": "活跃", + "unverified": "未验证", + "edit": "编辑", + "ban": "禁用", + "unban": "解禁", + "viewDetails": "查看详情", + "banReason": "禁用原因", + "banExpires": "禁用到期", + "userDetails": "用户详情", + "name": "姓名", + "email": "邮箱", + "emailVerified": "邮箱验证", + "verified": "已验证", + "lastActive": "最后活跃", + "close": "关闭", + "roleUpdated": "角色已更新", + "roleUpdateFailed": "角色更新失败", + "userBanned": "用户已禁用", + "userUnbanned": "用户已解禁", + "banFailed": "禁用操作失败", + "pagination": { + "previous": "上一页", + "next": "下一页", + "page": "第 {current} / {total} 页" + }, + "cancel": "取消" + } + }, + "dashboard": { + "title": "仪表盘", + "welcome": "欢迎回来", + "cards": { + "personalInfo": { + "title": "个人信息", + "labels": { + "name": "姓名", + "email": "邮箱", + "status": "状态", + "notSet": "未设置" + } + }, + "quickActions": { + "title": "快捷操作", + "editProfile": "编辑个人资料", + "accountSettings": "账户设置", + "securitySettings": "安全设置" + } + }, + "favorites": { + "title": "我的收藏", + "empty": "还没有收藏的工具。", + "browseTools": "去浏览工具并收藏" + } + }, + "profile": { + "title": "个人资料", + "subtitle": "管理您的账户设置和偏好", + "sections": { + "basicInfo": { + "title": "基本信息", + "fullName": "姓名", + "email": "邮箱地址", + "verificationStatus": "验证状态", + "notSet": "未设置", + "nameNotSet": "姓名未设置", + "accountId": "账户 ID" + }, + "accountSettings": { + "title": "账户详情", + "memberSince": "注册于", + "lastLogin": "最近登录", + "accountType": "账户类型" + } + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "请输入您的姓名", + "emailLabel": "邮箱", + "emailPlaceholder": "请输入您的邮箱地址", + "updateButton": "更新资料", + "updating": "更新中...", + "updateSuccess": "个人资料更新成功", + "updateError": "个人资料更新失败" + } + }, + "contact": { + "title": "联系我们", + "subtitle": "我们很乐意倾听您的声音。给我们发送消息,我们会尽快回复。", + "description": "请联系我们,我们会尽快回复。", + "testimonial": { + "title": "帮助用户发现最佳 AI 工具", + "description": "Toolso.AI 致力于为用户提供精选的 AI 工具目录,帮助大家找到最适合的 AI 助手。" + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "companyLabel": "公司", + "companyPlaceholder": "某某科技有限公司", + "messageLabel": "消息", + "messagePlaceholder": "请在此处输入您的消息", + "submitButton": "提交", + "submitting": "发送中...", + "submitSuccess": "消息发送成功!", + "submitError": "消息发送失败,请重试。" + } + }, + "blog": { + "title": "博客", + "subtitle": "来自我们团队的最新见解与更新", + "readMore": "阅读更多", + "minRead": "分钟阅读" + }, + "errors": { + "404": { + "title": "404 - 页面未找到", + "message": "您正在寻找的页面不存在。", + "backHome": "返回首页" + }, + "500": { + "title": "出错了", + "message": "我们遇到了一些技术问题,请稍后重试。", + "backHome": "返回首页" + }, + "general": { + "title": "发生错误", + "message": "发生了一些意外情况,请重试。", + "tryAgain": "重试" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "张伟", + "designation": "软件工程师" + }, + { + "name": "王强", + "designation": "产品经理" + }, + { + "name": "李娜", + "designation": "数据科学家" + }, + { + "name": "陈婷", + "designation": "UX设计师" + }, + { + "name": "赵明", + "designation": "全栈开发者" + }, + { + "name": "朱悦", + "designation": "独立开发者" + } + ] + }, + "footer": { + "tagline": "发现最好的 AI 工具,提升你的工作效率。", + "product": { + "title": "产品", + "features": "功能", + "documentation": "文档" + }, + "company": { + "title": "公司", + "about": "关于我们", + "blog": "博客", + "careers": "招聘" + }, + "legal": { + "title": "法律", + "privacy": "隐私政策", + "terms": "服务条款", + "cookies": "Cookie 政策" + }, + "social": { + "title": "社交", + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + }, + "newsletter": { + "title": "订阅邮件", + "description": "获取最新动态和资讯,直接发送到您的邮箱。", + "placeholder": "输入您的邮箱", + "subscribe": "订阅", + "success": "订阅成功!感谢加入。", + "invalidEmail": "请输入有效的邮箱地址。", + "error": "订阅失败,请重试。" + } + }, + "tools": { + "title": "AI 工具库", + "subtitle": "发现最好的 AI 工具,提升您的工作效率", + "searchPlaceholder": "搜索工具...", + "all": "全部", + "foundTools": "共找到 {count} 个工具", + "visitWebsite": "访问网站", + "noTools": "暂无工具", + "backToTools": "返回工具列表", + "about": "介绍", + "categories": "分类", + "tags": "标签", + "visitButton": "访问网站", + "toolInfo": "工具信息", + "domain": "域名", + "added": "添加时间", + "notFound": "工具未找到", + "favorites": { + "add": "收藏", + "remove": "取消收藏", + "loginRequired": "请先登录后再收藏", + "error": "操作失败,请重试。" + }, + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费" + }, + "categoryPage": { + "viewAll": "查看该分类全部 {count} 个工具" + }, + "reviewCta": "评分与评论来自已验证的社区用户,每条评论旁展示“有用”计数。", + "alternatives": "替代品", + "seeAllAlternatives": "查看全部替代品", + "stats": { + "votes": "票数", + "views": "浏览量" + }, + "share": { + "share": "分享", + "copy": "复制", + "copyLink": "复制链接", + "copied": "链接已复制" + }, + "sort": { + "latest": "最新", + "trending": "最热" + } + }, + "seo": { + "home": { + "title": "DevAI.tools — 开发者 AI 工具", + "description": "面向开发者的 AI 工具目录:代码助手、运维自动化、测试副驾驶,由社区每日排名。", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "博客 - Toolso.AI", + "description": "关于 AI 工具的最新资讯、教程和更新。了解最佳 AI 工具和行业趋势。", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "联系我们 - Toolso.AI", + "description": "与我们取得联系。我们期待听到您的反馈和工具推荐建议。", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "登录 - Toolso.AI", + "description": "登录您的账户,提交工具、收藏喜爱的工具,为 AI 工具目录做贡献。", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "注册 - Toolso.AI", + "description": "创建您的账户,开始为 AI 工具目录做贡献。提交工具、加入我们的社区。", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "服务条款 - Toolso.AI", + "description": "阅读我们的服务条款,了解使用 Toolso.AI 的规则和指南。", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "隐私政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上收集、使用和保护您的个人信息和数据。", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie 政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上使用 cookies 和类似的跟踪技术。", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI 工具库 - 发现最好的 AI 工具", + "description": "浏览精选的 AI 工具集合。找到提升效率、激发创意的最佳 AI 工具。" + } + }, + "featuredTools": { + "title": "精选工具", + "subtitle": "精选优质 AI 工具,助力提升工作效率", + "visitWebsite": "访问网站", + "empty": "暂无工具,请先在后台添加", + "viewAll": "查看全部工具" + }, + "voting": { + "vote": "投票", + "voted": "已投", + "unvote": "取消投票", + "loginRequired": "投票需要先登录,登录后会自动回到本页。", + "rateLimited": "操作太快了,请稍后再试。", + "error": "投票失败,请重试。" + }, + "reviews": { + "title": "用户评论", + "writeReview": "写评论", + "empty": "还没有评论——来分享你的使用体验吧。", + "loadMore": "加载更多", + "loading": "加载中...", + "helpful": "有用", + "verifiedUser": "已验证用户", + "pros": "优点", + "cons": "缺点", + "yourRating": "你的评分", + "ratingRequired": "请先选择星级评分。", + "titlePlaceholder": "一句话总结(可选)", + "contentPlaceholder": "你用它做什么?效果如何?", + "prosPlaceholder": "它哪里做得好?", + "consPlaceholder": "哪里还可以改进?", + "useCasePlaceholder": "你的使用场景(如 社媒内容创作)", + "saving": "保存中...", + "submit": "发布评论", + "update": "更新评论", + "cancel": "取消", + "delete": "删除我的评论", + "deleted": "评论已删除", + "tooShort": "评论有点短——至少写一句话吧。", + "error": "评论保存失败,请重试。", + "basedOn": "共 {count} 条评论" + }, + "submission": { + "name": "工具名称", + "websiteUrl": "官网地址", + "tagline": "一句话简介", + "taglinePlaceholder": "展示在卡片上的一句话卖点", + "description": "详细介绍", + "descriptionPlaceholder": "它是做什么的?适合谁?有什么不同?", + "logoUrl": "Logo 地址", + "category": "分类", + "pricingLabel": "定价模式", + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费", + "freeTrial": "免费试用", + "openSource": "开源", + "contact": "联系定价" + }, + "founderName": "创始人 / 公司", + "contactEmail": "联系邮箱", + "socialLinks": "社交链接", + "note": "给编辑的备注", + "notePlaceholder": "任何能加快审核的信息(上线时间、数据等)", + "selectPlaceholder": "请选择...", + "submit": "提交审核", + "submitting": "提交中...", + "submitted": "已提交!我们会在 48 小时内完成审核。", + "reviewNote": "免费收录 · 48 小时内审核", + "duplicateFound": "这个工具可能已经被收录:", + "duplicateBlocked": "该工具似乎已被收录,不允许重复提交。", + "error": "提交失败,请检查填写内容。" + }, + "claim": { + "claimThisTool": "认领此工具", + "verifiedOwner": "已认证所有者", + "formTitle": "认领该收录页的所有权", + "rolePlaceholder": "你的身份(如 创始人、市场负责人)", + "messagePlaceholder": "我们如何验证你的身份?(同域名邮箱、官方报道页等)", + "proofPlaceholder": "证明链接(可选)", + "submit": "发送认领申请", + "submitting": "发送中...", + "submitted": "认领申请已发送,我们会尽快审核。", + "pendingExists": "你已有一条待审核的认领申请。", + "cancel": "取消", + "error": "认领申请发送失败。" + }, + "rankings": { + "title": "社区榜单", + "subtitle": "七个实时榜单由投票、评论、收藏与互动数据驱动——不接受赞助排名。", + "trending": "趋势榜", + "popular": "热门榜", + "mostVoted": "最多投票", + "mostSaved": "最多收藏", + "highestRated": "最高评分", + "new": "最新收录", + "editorsChoice": "编辑精选", + "empty": "该榜单暂无工具。" + } +} diff --git a/sites/devai-tools/next.config.mjs b/sites/devai-tools/next.config.mjs new file mode 100644 index 0000000..84f2b3e --- /dev/null +++ b/sites/devai-tools/next.config.mjs @@ -0,0 +1,5 @@ +import createSiteConfig from "@aidir/core/next-config"; + +export default createSiteConfig({ + requestPath: "./src/i18n/request.ts", +}); diff --git a/sites/devai-tools/package.json b/sites/devai-tools/package.json new file mode 100644 index 0000000..fc48802 --- /dev/null +++ b/sites/devai-tools/package.json @@ -0,0 +1,34 @@ +{ + "name": "site-devai-tools", + "version": "1.0.0", + "description": "DevAI.tools — AI directory site powered by @aidir/core", + "private": true, + "scripts": { + "dev": "next dev -p 3004", + "build": "next build", + "start": "next start -p 3004", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@aidir/core": "workspace:*", + "next": "16.1.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "sonner": "^2.0.7", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "framer-motion": "^12.43.0" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@types/mdx": "^2.0.13", + "typescript": "^5", + "tailwindcss": "^3.4.1", + "postcss": "^8" + } +} diff --git a/sites/devai-tools/postcss.config.mjs b/sites/devai-tools/postcss.config.mjs new file mode 100644 index 0000000..a06f589 --- /dev/null +++ b/sites/devai-tools/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/sites/devai-tools/public/avatar.jpeg b/sites/devai-tools/public/avatar.jpeg new file mode 100644 index 0000000..5f84d25 Binary files /dev/null and b/sites/devai-tools/public/avatar.jpeg differ diff --git a/sites/devai-tools/public/banner.png b/sites/devai-tools/public/banner.png new file mode 100644 index 0000000..1913b5c Binary files /dev/null and b/sites/devai-tools/public/banner.png differ diff --git a/sites/devai-tools/public/icon-192.png b/sites/devai-tools/public/icon-192.png new file mode 100644 index 0000000..7c35646 Binary files /dev/null and b/sites/devai-tools/public/icon-192.png differ diff --git a/sites/devai-tools/public/icon-512.png b/sites/devai-tools/public/icon-512.png new file mode 100644 index 0000000..9dcae12 Binary files /dev/null and b/sites/devai-tools/public/icon-512.png differ diff --git a/sites/devai-tools/public/icon.svg b/sites/devai-tools/public/icon.svg new file mode 100644 index 0000000..c32f121 --- /dev/null +++ b/sites/devai-tools/public/icon.svg @@ -0,0 +1 @@ +D diff --git a/sites/devai-tools/public/noise.webp b/sites/devai-tools/public/noise.webp new file mode 100644 index 0000000..8349904 Binary files /dev/null and b/sites/devai-tools/public/noise.webp differ diff --git a/sites/devai-tools/public/og-image.png b/sites/devai-tools/public/og-image.png new file mode 100644 index 0000000..6962af5 Binary files /dev/null and b/sites/devai-tools/public/og-image.png differ diff --git a/sites/devai-tools/public/robots.txt b/sites/devai-tools/public/robots.txt new file mode 100644 index 0000000..9f21055 --- /dev/null +++ b/sites/devai-tools/public/robots.txt @@ -0,0 +1,24 @@ +# robots.txt for Toolso.AI - AI Tools Directory +# https://toolso.ai + +User-agent: * +Allow: / + +# Disallow admin and API pages +Disallow: /admin/ +Disallow: /api/ + +# Disallow authentication pages +Disallow: /*/signup +Disallow: /*/login +Disallow: /*/check-email +Disallow: /*/verify-email +Disallow: /*/forgot-password +Disallow: /*/reset-password + +# Disallow protected user pages +Disallow: /*/dashboard +Disallow: /*/profile + +# Sitemap location +Sitemap: https://toolso.ai/sitemap.xml diff --git a/sites/devai-tools/public/skeleton-one.png b/sites/devai-tools/public/skeleton-one.png new file mode 100644 index 0000000..9734078 Binary files /dev/null and b/sites/devai-tools/public/skeleton-one.png differ diff --git a/sites/devai-tools/public/tyler.jpeg b/sites/devai-tools/public/tyler.jpeg new file mode 100644 index 0000000..667f0dc Binary files /dev/null and b/sites/devai-tools/public/tyler.jpeg differ diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/analytics/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/analytics/page.tsx new file mode 100644 index 0000000..0586ba2 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/analytics/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/analytics/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/analytics/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/categories/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/categories/page.tsx new file mode 100644 index 0000000..4b50d6c --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/categories/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/categories/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/categories/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/claims/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/claims/page.tsx new file mode 100644 index 0000000..a3fe61d --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/claims/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/claims/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/claims/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/discovery/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/discovery/page.tsx new file mode 100644 index 0000000..bb70237 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/discovery/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/discovery/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/discovery/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/page.tsx new file mode 100644 index 0000000..df0a27b --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/reviews/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/reviews/page.tsx new file mode 100644 index 0000000..a42f9ac --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/reviews/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/reviews/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/reviews/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/submissions/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/submissions/page.tsx new file mode 100644 index 0000000..7ff5ca4 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/submissions/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/submissions/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/submissions/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/tags/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/tags/page.tsx new file mode 100644 index 0000000..516f034 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/tags/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tags/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tags/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/tools/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/tools/page.tsx new file mode 100644 index 0000000..364ce24 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tools/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tools/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/users/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/users/page.tsx new file mode 100644 index 0000000..f6c4ba4 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/users/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/users/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/users/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/admin/votes/page.tsx b/sites/devai-tools/src/app/[locale]/(admin)/admin/votes/page.tsx new file mode 100644 index 0000000..32fd76c --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/admin/votes/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(admin)/admin/votes/page.tsx 的薄路由 +export const revalidate = 0; +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/votes/page"; diff --git a/sites/devai-tools/src/app/[locale]/(admin)/layout.tsx b/sites/devai-tools/src/app/[locale]/(admin)/layout.tsx new file mode 100644 index 0000000..d58cb83 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(admin)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/layout"; diff --git a/sites/devai-tools/src/app/[locale]/(auth)/forgot-password/page.tsx b/sites/devai-tools/src/app/[locale]/(auth)/forgot-password/page.tsx new file mode 100644 index 0000000..737bb95 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(auth)/forgot-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/forgot-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/forgot-password/page"; diff --git a/sites/devai-tools/src/app/[locale]/(auth)/layout.tsx b/sites/devai-tools/src/app/[locale]/(auth)/layout.tsx new file mode 100644 index 0000000..2d015d0 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(auth)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/layout"; diff --git a/sites/devai-tools/src/app/[locale]/(auth)/login/page.tsx b/sites/devai-tools/src/app/[locale]/(auth)/login/page.tsx new file mode 100644 index 0000000..524b156 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(auth)/login/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/login/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/login/page"; diff --git a/sites/devai-tools/src/app/[locale]/(auth)/reset-password/page.tsx b/sites/devai-tools/src/app/[locale]/(auth)/reset-password/page.tsx new file mode 100644 index 0000000..69c68f4 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(auth)/reset-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/reset-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/reset-password/page"; diff --git a/sites/devai-tools/src/app/[locale]/(auth)/signup/page.tsx b/sites/devai-tools/src/app/[locale]/(auth)/signup/page.tsx new file mode 100644 index 0000000..414f955 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(auth)/signup/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/signup/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/signup/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx new file mode 100644 index 0000000..1e24e74 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/[slug]/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/ai-tools-for/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/ai-tools-for/page.tsx new file mode 100644 index 0000000..e17e80b --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/ai-tools-for/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/best/[slug]/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/best/[slug]/page.tsx new file mode 100644 index 0000000..a4f396b --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/best/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/[slug]/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/best/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/best/page.tsx new file mode 100644 index 0000000..af741b7 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/best/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/blog/[slug]/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/blog/[slug]/page.tsx new file mode 100644 index 0000000..ddcaf5c --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/blog/[slug]/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/[slug]/page.tsx 的薄路由 +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/[slug]/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/blog/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/blog/page.tsx new file mode 100644 index 0000000..e0aaa51 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/blog/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/category/[slug]/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/category/[slug]/page.tsx new file mode 100644 index 0000000..67bc8b7 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/category/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/category/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/category/[slug]/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/contact/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/contact/page.tsx new file mode 100644 index 0000000..38cf0af --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/contact/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/contact/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/contact/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/cookies/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/cookies/page.tsx new file mode 100644 index 0000000..6e27f11 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/cookies/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/cookies/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/cookies/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/layout.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/layout.tsx new file mode 100644 index 0000000..0602321 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/layout.tsx @@ -0,0 +1,4 @@ +import { createMarketingLayout } from "@aidir/core/kit/create-marketing-layout"; +import { siteConfig } from "@/site/brand"; + +export default createMarketingLayout(siteConfig); diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/page.tsx new file mode 100644 index 0000000..0afcbb9 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/page.tsx @@ -0,0 +1,9 @@ +import { createHomePage, createHomeMetadata } from "@aidir/core/kit/create-home"; +import { siteConfig } from "@/site/brand"; +import { SiteHome } from "@/site/home"; + +// 首页内容变化不频繁,ISR 每小时再生 +export const revalidate = 3600; + +export const generateMetadata = createHomeMetadata(siteConfig); +export default createHomePage(siteConfig, SiteHome); diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/privacy/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/privacy/page.tsx new file mode 100644 index 0000000..ab85a20 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/privacy/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/privacy/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/privacy/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/rankings/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/rankings/page.tsx new file mode 100644 index 0000000..1b7854c --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/rankings/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/rankings/page.tsx 的薄路由 +export const revalidate = 1800; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/rankings/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/submit/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/submit/page.tsx new file mode 100644 index 0000000..5cd1d96 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/submit/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/submit/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/submit/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/terms/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/terms/page.tsx new file mode 100644 index 0000000..588ebc3 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/terms/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/terms/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/terms/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/tools/[slug]/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/tools/[slug]/page.tsx new file mode 100644 index 0000000..c88bbd2 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/tools/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/tools/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/[slug]/page"; diff --git a/sites/devai-tools/src/app/[locale]/(marketing)/tools/page.tsx b/sites/devai-tools/src/app/[locale]/(marketing)/tools/page.tsx new file mode 100644 index 0000000..ef24d90 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(marketing)/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/tools/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/page"; diff --git a/sites/devai-tools/src/app/[locale]/(protected)/dashboard/page.tsx b/sites/devai-tools/src/app/[locale]/(protected)/dashboard/page.tsx new file mode 100644 index 0000000..20940ed --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(protected)/dashboard/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/dashboard/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/dashboard/page"; diff --git a/sites/devai-tools/src/app/[locale]/(protected)/layout.tsx b/sites/devai-tools/src/app/[locale]/(protected)/layout.tsx new file mode 100644 index 0000000..9e15378 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(protected)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/layout"; diff --git a/sites/devai-tools/src/app/[locale]/(protected)/profile/page.tsx b/sites/devai-tools/src/app/[locale]/(protected)/profile/page.tsx new file mode 100644 index 0000000..cf5ba66 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/(protected)/profile/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/profile/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/profile/page"; diff --git a/sites/devai-tools/src/app/[locale]/check-email/page.tsx b/sites/devai-tools/src/app/[locale]/check-email/page.tsx new file mode 100644 index 0000000..0cf4d63 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/check-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/check-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/check-email/page"; diff --git a/sites/devai-tools/src/app/[locale]/layout.tsx b/sites/devai-tools/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..5141337 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/layout.tsx 的薄路由 +export { default, generateStaticParams } from "@aidir/core/pages/[locale]/layout"; diff --git a/sites/devai-tools/src/app/[locale]/verify-email/page.tsx b/sites/devai-tools/src/app/[locale]/verify-email/page.tsx new file mode 100644 index 0000000..28f07f2 --- /dev/null +++ b/sites/devai-tools/src/app/[locale]/verify-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/verify-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/verify-email/page"; diff --git a/sites/devai-tools/src/app/api/auth/[...all]/route.ts b/sites/devai-tools/src/app/api/auth/[...all]/route.ts new file mode 100644 index 0000000..3ad325b --- /dev/null +++ b/sites/devai-tools/src/app/api/auth/[...all]/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/[...all]/route.ts 的薄路由 +export { POST, GET } from "@aidir/core/pages/api/auth/[...all]/route"; diff --git a/sites/devai-tools/src/app/api/auth/forgot-password/route.ts b/sites/devai-tools/src/app/api/auth/forgot-password/route.ts new file mode 100644 index 0000000..04090fd --- /dev/null +++ b/sites/devai-tools/src/app/api/auth/forgot-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/forgot-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/forgot-password/route"; diff --git a/sites/devai-tools/src/app/api/auth/resend-verification/route.ts b/sites/devai-tools/src/app/api/auth/resend-verification/route.ts new file mode 100644 index 0000000..4e8ce70 --- /dev/null +++ b/sites/devai-tools/src/app/api/auth/resend-verification/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/resend-verification/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/resend-verification/route"; diff --git a/sites/devai-tools/src/app/api/auth/reset-password/route.ts b/sites/devai-tools/src/app/api/auth/reset-password/route.ts new file mode 100644 index 0000000..652eba4 --- /dev/null +++ b/sites/devai-tools/src/app/api/auth/reset-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/reset-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/reset-password/route"; diff --git a/sites/devai-tools/src/app/api/auth/verify-email/route.ts b/sites/devai-tools/src/app/api/auth/verify-email/route.ts new file mode 100644 index 0000000..c658aab --- /dev/null +++ b/sites/devai-tools/src/app/api/auth/verify-email/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-email/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-email/route"; diff --git a/sites/devai-tools/src/app/api/auth/verify-reset-token/route.ts b/sites/devai-tools/src/app/api/auth/verify-reset-token/route.ts new file mode 100644 index 0000000..02b6c76 --- /dev/null +++ b/sites/devai-tools/src/app/api/auth/verify-reset-token/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-reset-token/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-reset-token/route"; diff --git a/sites/devai-tools/src/app/api/newsletter/unsubscribe/route.ts b/sites/devai-tools/src/app/api/newsletter/unsubscribe/route.ts new file mode 100644 index 0000000..5bee9b9 --- /dev/null +++ b/sites/devai-tools/src/app/api/newsletter/unsubscribe/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/newsletter/unsubscribe/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/newsletter/unsubscribe/route"; diff --git a/sites/devai-tools/src/app/api/outbound/route.ts b/sites/devai-tools/src/app/api/outbound/route.ts new file mode 100644 index 0000000..fa3a252 --- /dev/null +++ b/sites/devai-tools/src/app/api/outbound/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/outbound/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/outbound/route"; diff --git a/sites/devai-tools/src/app/api/search/route.ts b/sites/devai-tools/src/app/api/search/route.ts new file mode 100644 index 0000000..d3f1006 --- /dev/null +++ b/sites/devai-tools/src/app/api/search/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/search/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/search/route"; diff --git a/sites/devai-tools/src/app/api/tools/[id]/vote/route.ts b/sites/devai-tools/src/app/api/tools/[id]/vote/route.ts new file mode 100644 index 0000000..56e4b5f --- /dev/null +++ b/sites/devai-tools/src/app/api/tools/[id]/vote/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/tools/[id]/vote/route.ts 的薄路由 +export { POST, DELETE } from "@aidir/core/pages/api/tools/[id]/vote/route"; diff --git a/sites/devai-tools/src/app/api/upload/image/route.ts b/sites/devai-tools/src/app/api/upload/image/route.ts new file mode 100644 index 0000000..bce8a93 --- /dev/null +++ b/sites/devai-tools/src/app/api/upload/image/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/image/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/image/route"; diff --git a/sites/devai-tools/src/app/api/upload/simple/route.ts b/sites/devai-tools/src/app/api/upload/simple/route.ts new file mode 100644 index 0000000..665aa2b --- /dev/null +++ b/sites/devai-tools/src/app/api/upload/simple/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/simple/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/simple/route"; diff --git a/sites/devai-tools/src/app/api/user/admin-status/route.ts b/sites/devai-tools/src/app/api/user/admin-status/route.ts new file mode 100644 index 0000000..46244da --- /dev/null +++ b/sites/devai-tools/src/app/api/user/admin-status/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/admin-status/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/admin-status/route"; diff --git a/sites/devai-tools/src/app/api/user/profile/route.ts b/sites/devai-tools/src/app/api/user/profile/route.ts new file mode 100644 index 0000000..3ddc7ff --- /dev/null +++ b/sites/devai-tools/src/app/api/user/profile/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/profile/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/profile/route"; diff --git a/sites/devai-tools/src/app/layout.tsx b/sites/devai-tools/src/app/layout.tsx new file mode 100644 index 0000000..01115cc --- /dev/null +++ b/sites/devai-tools/src/app/layout.tsx @@ -0,0 +1,3 @@ +import "@aidir/core/styles/globals.css"; + +export { default } from "@aidir/core/pages/app-layout"; diff --git a/sites/devai-tools/src/app/manifest.ts b/sites/devai-tools/src/app/manifest.ts new file mode 100644 index 0000000..c7fc70b --- /dev/null +++ b/sites/devai-tools/src/app/manifest.ts @@ -0,0 +1,2 @@ +// 自动生成:manifest.ts 的薄路由 +export { default } from "@aidir/core/pages/manifest"; diff --git a/sites/devai-tools/src/app/not-found.tsx b/sites/devai-tools/src/app/not-found.tsx new file mode 100644 index 0000000..cb56be7 --- /dev/null +++ b/sites/devai-tools/src/app/not-found.tsx @@ -0,0 +1,2 @@ +// 自动生成:not-found.tsx 的薄路由 +export { default } from "@aidir/core/pages/not-found"; diff --git a/sites/devai-tools/src/app/sitemap.ts b/sites/devai-tools/src/app/sitemap.ts new file mode 100644 index 0000000..c773151 --- /dev/null +++ b/sites/devai-tools/src/app/sitemap.ts @@ -0,0 +1,2 @@ +// 自动生成:sitemap.ts 的薄路由 +export { default } from "@aidir/core/pages/sitemap"; diff --git a/sites/devai-tools/src/i18n/request.ts b/sites/devai-tools/src/i18n/request.ts new file mode 100644 index 0000000..6047c0d --- /dev/null +++ b/sites/devai-tools/src/i18n/request.ts @@ -0,0 +1,37 @@ +import { getRequestConfig } from "next-intl/server"; +import { notFound } from "next/navigation"; +import { locales, defaultLocale, type Locale } from "@aidir/core/i18n.config"; + +/** 站点品牌 SEO 文案覆盖(每个网站不同) */ +const brandMessages = { + en: { + seo: { home: {"title":"DevAI.tools — AI Tools for Developers","description":"Code assistants, DevOps automation and testing copilots — the AI tools developers actually upvote, ranked daily.","ogImage":"/og-image.png"} }, + hero: { title: "DevAI.tools — AI Tools for Developers", description: "Code assistants, DevOps automation and testing copilots — the AI tools developers actually upvote, ranked daily." }, + common: { brand: { name: "DevAI.tools", tagline: "AI tools for developers — curated, tested, ranked by the community." } }, + }, + zh: { + seo: { home: {"title":"DevAI.tools — 开发者 AI 工具","description":"面向开发者的 AI 工具目录:代码助手、运维自动化、测试副驾驶,由社区每日排名。","ogImage":"/og-image.png"} }, + hero: { title: "DevAI.tools — 开发者 AI 工具", description: "面向开发者的 AI 工具目录:代码助手、运维自动化、测试副驾驶,由社区每日排名。" }, + common: { brand: { name: "DevAI.tools", tagline: "AI tools for developers — curated, tested, ranked by the community." } }, + }, +} as const; + +export default getRequestConfig(async ({ requestLocale }) => { + let locale = await requestLocale; + if (!locale || !locales.includes(locale as Locale)) { + locale = defaultLocale; + } + try { + // 底座基础文案 + 站点品牌覆盖(浅合并到顶层命名空间) + const base = (await import(`../../messages/${locale}.json`)).default; + const override = brandMessages[locale as keyof typeof brandMessages]; + const messages = { ...base }; + for (const [ns, value] of Object.entries(override)) { + messages[ns] = { ...(messages[ns] ?? {}), ...value }; + } + return { locale, messages }; + } catch (error) { + console.error("Error loading messages for locale:", locale, error); + notFound(); + } +}); diff --git a/sites/devai-tools/src/proxy.ts b/sites/devai-tools/src/proxy.ts new file mode 100644 index 0000000..eec3c1e --- /dev/null +++ b/sites/devai-tools/src/proxy.ts @@ -0,0 +1,10 @@ +import { proxy } from "@aidir/core/proxy"; + +export default proxy; + +export const config = { + matcher: [ + "/", + "/((?!api|_next|_vercel|.*\\..*).*)" + ] +}; diff --git a/sites/devai-tools/src/site/brand.tsx b/sites/devai-tools/src/site/brand.tsx new file mode 100644 index 0000000..9720ffa --- /dev/null +++ b/sites/devai-tools/src/site/brand.tsx @@ -0,0 +1,95 @@ +import type { SiteConfig } from "@/kit/types"; + +// DevAI.tools —— 独立站点的全部品牌/导航/页脚配置 +export const siteConfig: SiteConfig = { + "port": 3004, + "brand": { + "name": "DevAI.tools", + "tagline": "AI tools for developers — curated, tested, ranked by the community.", + "headline": "AI tools for developers", + "subheadline": "Code assistants, DevOps automation, testing copilots and everything else you ship with." + }, + "navItems": [ + { + "label": "Tools", + "href": "/tools" + }, + { + "label": "Workflows", + "href": "/best" + }, + { + "label": "Use Cases", + "href": "/ai-tools-for" + }, + { + "label": "Rankings", + "href": "/rankings" + }, + { + "label": "Submit", + "href": "/submit" + } + ], + "footerGroups": [ + { + "title": "Directory", + "links": [ + { + "label": "All Tools", + "href": "/tools" + }, + { + "label": "Rankings", + "href": "/rankings" + }, + { + "label": "Use Cases", + "href": "/ai-tools-for" + } + ] + }, + { + "title": "Build", + "links": [ + { + "label": "Workflows", + "href": "/best" + }, + { + "label": "Submit a Tool", + "href": "/submit" + }, + { + "label": "Blog", + "href": "/blog" + } + ] + }, + { + "title": "Legal", + "links": [ + { + "label": "Terms", + "href": "/terms" + }, + { + "label": "Privacy", + "href": "/privacy" + } + ] + } + ], + "searchPlaceholder": "Search dev tools...", + "seo": { + "en": { + "title": "DevAI.tools — AI Tools for Developers", + "description": "Code assistants, DevOps automation and testing copilots — the AI tools developers actually upvote, ranked daily." + }, + "zh": { + "title": "DevAI.tools — 开发者 AI 工具", + "description": "面向开发者的 AI 工具目录:代码助手、运维自动化、测试副驾驶,由社区每日排名。" + } + }, + "id": "devai-tools" +}; diff --git a/sites/devai-tools/src/site/home.tsx b/sites/devai-tools/src/site/home.tsx new file mode 100644 index 0000000..69aa01a --- /dev/null +++ b/sites/devai-tools/src/site/home.tsx @@ -0,0 +1,192 @@ +// 自动生成:站点首页组件(源自底座 niche 形态,品牌来自 @/site/brand) +import { siteConfig } from "@/site/brand"; +import { Code2, Terminal, Workflow, Layers } from "lucide-react"; +import { ToolCard } from "@/components/tool-card"; +import { LocaleLink } from "@/components/locale-link"; +import { SectionHeader } from "@/kit/section"; +import { getHomeDataSafe } from "@/kit/home-data"; + +/** Niche:垂直行业目录(AI for Developers) */ + + +const navItems = [ + { label: "Tools", href: "/tools" }, + { label: "Workflows", href: "/best" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Rankings", href: "/rankings" }, + { label: "Submit", href: "/submit" }, +]; + +const footerGroups = [ + { + title: "Directory", + links: [ + { label: "All Tools", href: "/tools" }, + { label: "Rankings", href: "/rankings" }, + { label: "Use Cases", href: "/ai-tools-for" }, + ], + }, + { + title: "Build", + links: [ + { label: "Workflows", href: "/best" }, + { label: "Submit a Tool", href: "/submit" }, + { label: "Blog", href: "/blog" }, + ], + }, + { + title: "Legal", + links: [ + { label: "Terms", href: "/terms" }, + { label: "Privacy", href: "/privacy" }, + ], + }, +]; + +async function SiteHome({ locale }: { locale: string }) { + const data = await getHomeDataSafe(6); + + return ( +
+ {/* Terminal 风格 Hero */} +
+
+
+
+ + + + devai — zsh +
+
+

+ ${" "} + find-ai-tools --for developer +

+

+ + {siteConfig.brand.headline} +

+

+ {siteConfig.brand.subheadline} +

+

+ + Browse tools + +

+
+
+
+
+ +
+ {/* Use Cases as workflows */} + {data.useCases.length > 0 && ( +
+ +
+ {data.useCases.slice(0, 6).map((uc) => ( + +
+ + + {uc.toolCount} tools + +
+

+ {locale === "zh" && uc.nameZh ? uc.nameZh : uc.nameEn} +

+
+ ))} +
+
+ )} + + {/* Trending tools */} + {data.trending.length > 0 && ( +
+ +
+ {data.trending.slice(0, 6).map((tool, i) => ( + + ))} +
+
+ )} + + {/* Workflows(collections) */} + {data.collections.length > 0 && ( +
+ +
+ {data.collections.slice(0, 3).map((col) => ( + + +

+ {locale === "zh" && col.nameZh ? col.nameZh : col.nameEn} +

+

+ {locale === "zh" && col.introZh ? col.introZh : col.introEn} +

+
+ ))} +
+
+ )} + + {/* Categories */} + {data.categories.length > 0 && ( +
+ +
+ {data.categories.slice(0, 14).map((cat) => ( + + {locale === "zh" && cat.nameZh ? cat.nameZh : cat.nameEn} + + {cat.toolCount} + + + ))} +
+
+ )} +
+
+ ); +} + +export { SiteHome }; diff --git a/sites/devai-tools/tailwind.config.ts b/sites/devai-tools/tailwind.config.ts new file mode 100644 index 0000000..c4729ec --- /dev/null +++ b/sites/devai-tools/tailwind.config.ts @@ -0,0 +1,11 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./src/**/*.{js,ts,jsx,tsx,mdx}", + "../../packages/core/src/**/*.{js,ts,jsx,tsx,mdx}", + ], + presets: [require("../../packages/core/tailwind.preset.cjs")], +}; + +export default config; diff --git a/sites/devai-tools/tsconfig.json b/sites/devai-tools/tsconfig.json new file mode 100644 index 0000000..95fd293 --- /dev/null +++ b/sites/devai-tools/tsconfig.json @@ -0,0 +1,64 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./src/*", + "../../packages/core/src/*" + ], + "@aidir/core/pages/*": [ + "../../packages/core/src/pages/*" + ], + "@aidir/core/kit/*": [ + "../../packages/core/src/kit/*" + ], + "@aidir/core/src/*": [ + "../../packages/core/src/*" + ], + "@aidir/core/proxy": [ + "../../packages/core/src/proxy.ts" + ], + "@aidir/core/i18n.config": [ + "../../packages/core/src/i18n.config.ts" + ], + "@aidir/core/styles/globals.css": [ + "../../packages/core/src/styles/globals.css" + ], + "@aidir/core/*": [ + "../../packages/core/src/*", + "../../packages/core/*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/sites/findai/.env.example b/sites/findai/.env.example new file mode 100644 index 0000000..2d51eab --- /dev/null +++ b/sites/findai/.env.example @@ -0,0 +1,14 @@ +# findai 环境变量(与底座共享同一套 PostgreSQL / Better Auth / Admin) +DATABASE_URL="postgresql://postgres:postgres@127.0.0.1:15433/ai_directory" +BETTER_AUTH_SECRET="dev-secret-ai-directory-platform-0123456789abcdef" +BETTER_AUTH_URL="http://localhost:3005" +AUTH_GOOGLE_ID="" +AUTH_GOOGLE_SECRET="" +NEXT_PUBLIC_AUTH_GOOGLE_ENABLED="false" +AUTH_GITHUB_ID="" +AUTH_GITHUB_SECRET="" +NEXT_PUBLIC_AUTH_GITHUB_ENABLED="false" +RESEND_API_KEY="" +RESEND_FROM_EMAIL="findai " +NEXT_PUBLIC_APP_URL="http://localhost:3005" +NEXT_PUBLIC_APP_NAME="findai" diff --git a/sites/findai/.gitignore b/sites/findai/.gitignore new file mode 100644 index 0000000..309faff --- /dev/null +++ b/sites/findai/.gitignore @@ -0,0 +1,5 @@ +/node_modules +/.next +/.env*.local +next-env.d.ts +*.tsbuildinfo diff --git a/sites/findai/mdx-components.tsx b/sites/findai/mdx-components.tsx new file mode 100644 index 0000000..2a15d84 --- /dev/null +++ b/sites/findai/mdx-components.tsx @@ -0,0 +1 @@ +export { useMDXComponents } from "@aidir/core/src/mdx-components"; diff --git a/sites/findai/messages/en.json b/sites/findai/messages/en.json new file mode 100644 index 0000000..84cef92 --- /dev/null +++ b/sites/findai/messages/en.json @@ -0,0 +1,796 @@ +{ + "common": { + "brand": { + "name": "findai", + "tagline": "The minimal AI tool search engine.", + "copyright": "Copyright © 2025", + "allRightsReserved": "All rights reserved" + }, + "actions": { + "signIn": "Sign in", + "signUp": "Sign Up", + "signOut": "Sign Out", + "getStarted": "Get Started", + "startFree": "Start Free", + "learnMore": "Learn More", + "viewAll": "View All", + "submit": "Submit", + "cancel": "Cancel", + "save": "Save", + "delete": "Delete", + "edit": "Edit", + "update": "Update", + "continue": "Continue", + "back": "Back", + "next": "Next", + "contactSales": "Contact Sales", + "startTrial": "Start Free Trial" + }, + "status": { + "loading": "Loading...", + "verified": "Verified", + "pending": "Pending", + "active": "Active", + "inactive": "Inactive" + } + }, + "navigation": { + "main": { + "tools": "Tools", + "blog": "Blog", + "contact": "Contact", + "dashboard": "Dashboard", + "profile": "Profile" + }, + "footer": { + "legal": { + "terms": "Terms of Service", + "privacy": "Privacy Policy", + "cookies": "Cookie Policy" + }, + "social": { + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "Discover the Best AI Tools", + "title": "findai — The Minimal AI Tool Search Engine", + "description": "One search box, every AI tool. Describe what you're trying to do and find the right AI tool, ranked by the community.", + "cta": { + "primary": "Explore Tools", + "secondary": "Read Blog" + } + }, + "features": { + "title": "Everything You Need to Build Fast", + "subtitle": "Stop wasting time on boilerplate. Focus on your unique features while this template handles the foundation.", + "items": { + "aiOptimized": { + "title": "Modern Tech Stack", + "description": "Built with Next.js 14, TypeScript, Tailwind CSS, and PostgreSQL. Production-ready from day one." + }, + "zeroPipeline": { + "title": "Authentication Ready", + "description": "Email/password and Google OAuth configured. Session management and protected routes ready to use." + }, + "nonTechnical": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management. Monitor your users and manage permissions easily." + }, + "productionGrade": { + "title": "Blog System Included", + "description": "MDX-powered blog with i18n support. Create content in multiple languages with SEO optimization." + } + } + }, + "testimonials": { + "title": "Trusted by AI Enthusiasts", + "subtitle": "Join thousands of users discovering the best AI tools for their workflows.", + "items": [ + { + "name": "Sarah Chen", + "quote": "Toolso.AI helped me find the perfect AI writing assistant. The categorization makes discovery so easy!", + "designation": "Content Creator" + }, + { + "name": "Michael Park", + "quote": "Finally, a comprehensive AI tools directory that's well-organized. Saved me hours of research.", + "designation": "Product Manager" + }, + { + "name": "Emily Rodriguez", + "quote": "I discover new AI tools every week on Toolso.AI. It's become my go-to resource for AI exploration.", + "designation": "Startup Founder" + }, + { + "name": "David Kim", + "quote": "The search and filter features are incredibly helpful. Found exactly what I needed in minutes.", + "designation": "Software Engineer" + }, + { + "name": "Lisa Wang", + "quote": "Love the multilingual support! Makes it easy to explore AI tools in both English and Chinese.", + "designation": "Digital Marketer" + }, + { + "name": "James Liu", + "quote": "Great resource for staying up-to-date with the latest AI tools. The blog section is also very informative.", + "designation": "AI Researcher" + } + ] + }, + "companies": { + "title": "Built with Industry-Leading Technologies", + "subtitle": "Built on modern stack trusted by the world's best teams" + }, + "gridFeatures": { + "aiReady": { + "title": "Extensible Architecture", + "description": "Clean, modular code structure. Easy to add new features and integrations." + }, + "creem": { + "title": "Database Ready", + "description": "PostgreSQL with Drizzle ORM configured. Type-safe queries and migrations ready." + }, + "auth": { + "title": "Authentication System", + "description": "Better Auth with email/password and OAuth. Session management and protected routes ready." + }, + "deploy": { + "title": "One-Click Deploy", + "description": "Deploy to Vercel, Railway, or any platform instantly. Production-ready from day one." + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "Modern tech stack with Next.js 14, TypeScript, Tailwind CSS, and shadcn/ui components." + }, + "database": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management and system monitoring." + }, + "seo": { + "title": "SEO & Marketing", + "description": "Meta tags, Open Graph, sitemap, and analytics. Everything for organic growth." + }, + "vibeCoding": { + "title": "Blog System", + "description": "MDX-powered blog with multi-language support. Create content that ranks." + } + }, + "cta": { + "title": "Find Your Perfect AI Tool", + "description": "Browse our curated collection of AI tools and discover what works best for you.", + "button": "Explore Tools" + }, + "auth": { + "login": { + "title": "Sign in to your account", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "forgotPassword": "Forgot password?", + "noAccount": "Don't have an account?", + "signUpLink": "Sign Up", + "signInButton": "Sign in", + "signingIn": "Signing in...", + "errors": { + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "loginFailed": "Login failed. Please try again.", + "googleLoginFailed": "Google login failed. Please try again." + } + }, + "signup": { + "title": "Sign up for an account", + "nameLabel": "Full name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "hasAccount": "Already have an account?", + "signInLink": "Sign in", + "signUpButton": "Sign Up", + "signingUp": "Signing up...", + "errors": { + "nameRequired": "Please enter your name", + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "signupFailed": "Sign up failed. Please try again.", + "googleSignupFailed": "Google sign up failed. Please try again." + } + }, + "social": { + "googleSignIn": "Continue with Google", + "or": "Or continue with", + "githubSignIn": "Continue with GitHub" + }, + "checkEmail": { + "title": "Check Your Email", + "description": "We've sent a verification link to your email address. Please click the link to verify your account and get started.", + "notReceived": "Didn't receive the email?", + "checkSpam": "Check your spam or junk folder", + "checkEmailCorrect": "Make sure you entered the correct email", + "waitAndCheck": "Wait a few minutes and check again", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent successfully! Please check your inbox.", + "resendError": "Failed to resend verification email.", + "backToLogin": "Back to Login", + "securityNote": "For your security, the verification link will expire in 24 hours." + }, + "verifyEmail": { + "verifying": "Verifying Email", + "verifyingDescription": "Please wait while we verify your email address...", + "success": "Email Verified!", + "successDescription": "Your email has been successfully verified! Redirecting to login...", + "alreadyVerified": "Already Verified", + "failed": "Verification Failed", + "goToLogin": "Go to Login", + "backToSignUp": "Back to Sign Up", + "requestNew": "Request New Verification Email", + "checkSpamNote": "Check your spam folder if you don't see our emails" + }, + "emailVerifiedGuard": { + "title": "Email Verification Required", + "description": "Please verify your email address to access this page. Check your inbox for the verification link we sent to:", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent! Please check your inbox.", + "resendError": "Failed to send verification email. Please try again.", + "signOutLink": "Sign out and try a different account" + } + }, + "Admin": { + "sidebar": { + "title": "Admin Panel", + "subtitle": "System Management", + "dashboard": "Dashboard", + "tools": "Tools", + "categories": "Categories", + "tags": "Tags", + "users": "Users", + "backToDashboard": "Back to User Dashboard", + "submissions": "Submissions", + "claims": "Claims", + "reviews": "Reviews", + "discovery": "Discovery", + "votes": "Vote Audit", + "analytics": "Analytics" + }, + "header": { + "welcome": "Welcome", + "adminBadge": "Admin" + }, + "dashboard": { + "title": "Admin Dashboard", + "totalUsers": "Total Users", + "activeUsers": "Active Users", + "recentUsers": "Recent Users", + "viewAllUsers": "View All Users" + }, + "toolsManagement": { + "title": "Tools Management", + "totalCount": "{count} tools", + "searchPlaceholder": "Search tool name or slug...", + "allStatus": "All Status", + "published": "Published", + "draft": "Draft", + "addTool": "Add Tool", + "tool": "Tool", + "slug": "Slug", + "status": "Status", + "createdAt": "Created", + "actions": "Actions", + "noData": "No tools data", + "previous": "Previous", + "next": "Next", + "confirmDelete": "Are you sure you want to delete \"{name}\"? This action cannot be undone.", + "deleted": "Tool deleted", + "deleteFailed": "Delete failed", + "statusUpdated": "Status updated", + "statusUpdateFailed": "Status update failed", + "toDraft": "Set to draft", + "publish": "Publish", + "edit": "Edit", + "visitWebsite": "Visit website", + "delete": "Delete", + "modal": { + "editTitle": "Edit Tool", + "addTitle": "Add Tool", + "basicInfo": "Basic Information", + "linksAndImages": "Links & Images", + "categories": "Categories", + "tags": "Tags", + "slug": "Slug", + "status": "Status", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "domain": "Domain", + "websiteUrl": "Website URL", + "logoUrl": "Logo URL", + "coverImageUrl": "Cover Image URL", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTool": "Create Tool", + "requiredField": "Please fill in required fields", + "updated": "Tool updated", + "created": "Tool created", + "updateFailed": "Update failed", + "createFailed": "Create failed", + "statusDraft": "Draft", + "statusPublished": "Published", + "pricing": "Pricing", + "pricingNone": "Not set", + "pricingFree": "Free", + "pricingFreemium": "Freemium", + "pricingPaid": "Paid", + "featured": "Featured on homepage" + } + }, + "categoriesManagement": { + "title": "Categories Management", + "addCategory": "Add Category", + "order": "Order", + "category": "Category", + "slug": "Slug", + "toolCount": "Tools", + "toolCountLabel": "{count} tools", + "actions": "Actions", + "noData": "No categories data", + "edit": "Edit", + "delete": "Delete", + "cannotDelete": "This category has {count} tools, cannot delete", + "confirmDelete": "Are you sure you want to delete category \"{name}\"?", + "deleted": "Category deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Category", + "addTitle": "Add Category", + "slug": "Slug", + "icon": "Icon (emoji)", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "sortOrder": "Sort Order", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createCategory": "Create Category", + "requiredField": "Please fill in required fields", + "updated": "Category updated", + "created": "Category created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "tagsManagement": { + "title": "Tags Management", + "searchPlaceholder": "Search tags...", + "addTag": "Add Tag", + "toolCountLabel": "{count} tools", + "noData": "No tags data", + "edit": "Edit", + "delete": "Delete", + "confirmDeleteWithTools": "This tag is used by {count} tools. Deleting it will remove the tag from these tools. Continue?", + "confirmDelete": "Are you sure you want to delete tag \"{name}\"?", + "deleted": "Tag deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Tag", + "addTitle": "Add Tag", + "slug": "Slug", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTag": "Create Tag", + "requiredField": "Please fill in required fields", + "updated": "Tag updated", + "created": "Tag created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "users": { + "searchPlaceholder": "Search by name or email...", + "user": "User", + "role": "Role", + "status": "Status", + "joined": "Joined", + "actions": "Actions", + "admin": "Admin", + "banned": "Banned", + "active": "Active", + "unverified": "Unverified", + "verified": "Verified", + "emailVerified": "Email Verified", + "edit": "Edit", + "ban": "Ban", + "unban": "Unban", + "viewDetails": "View Details", + "banReason": "Ban Reason", + "banExpires": "Ban Expires", + "userDetails": "User Details", + "name": "Name", + "email": "Email", + "lastActive": "Last Active", + "close": "Close", + "roleUpdated": "Role updated successfully", + "roleUpdateFailed": "Failed to update role", + "userBanned": "User has been banned", + "userUnbanned": "User has been unbanned", + "banFailed": "Failed to ban/unban user", + "cancel": "Cancel", + "pagination": { + "previous": "Previous", + "next": "Next", + "page": "Page {current} of {total}" + } + } + }, + "dashboard": { + "title": "Dashboard", + "welcome": "Welcome back", + "cards": { + "personalInfo": { + "title": "Personal Info", + "labels": { + "name": "Name", + "email": "Email", + "status": "Status", + "notSet": "Not set" + } + }, + "quickActions": { + "title": "Quick Actions", + "editProfile": "Edit Profile", + "accountSettings": "Account Settings", + "securitySettings": "Security Settings" + } + }, + "favorites": { + "title": "My Favorites", + "empty": "No favorite tools yet.", + "browseTools": "Browse tools and save your favorites" + } + }, + "profile": { + "title": "Profile", + "subtitle": "Manage your account settings and preferences", + "sections": { + "basicInfo": { + "title": "Basic Information", + "fullName": "Full Name", + "email": "Email Address", + "verificationStatus": "Verification Status", + "notSet": "Not set", + "nameNotSet": "Name not set", + "accountId": "Account ID" + }, + "accountSettings": { + "title": "Account Settings", + "memberSince": "Member Since", + "lastLogin": "Last Login", + "accountType": "Account Type" + } + }, + "form": { + "nameLabel": "Name", + "namePlaceholder": "Enter your name", + "emailLabel": "Email", + "emailPlaceholder": "Enter your email", + "updateButton": "Update Profile", + "updating": "Updating...", + "updateSuccess": "Profile updated successfully!", + "updateError": "Failed to update profile. Please try again." + } + }, + "contact": { + "title": "Contact Us", + "subtitle": "We'd love to hear from you. Send us a message and we'll respond as soon as possible.", + "description": "Please reach out to us and we will get back to you shortly.", + "testimonial": { + "title": "We're here to help", + "description": "Our team is ready to assist you with any questions or feedback." + }, + "form": { + "nameLabel": "Full Name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "companyLabel": "Company", + "companyPlaceholder": "Your Company", + "messageLabel": "Message", + "messagePlaceholder": "Enter your message here", + "submitButton": "Submit", + "submitting": "Sending...", + "submitSuccess": "Message sent successfully!", + "submitError": "Failed to send message. Please try again." + } + }, + "blog": { + "title": "Blog", + "subtitle": "Latest insights and updates from our team", + "readMore": "Read More", + "minRead": "min read" + }, + "errors": { + "404": { + "title": "404 - Page Not Found", + "message": "The page you are looking for doesn't exist.", + "backHome": "Go to Homepage" + }, + "500": { + "title": "Something Went Wrong", + "message": "We're experiencing technical difficulties. Please try again later.", + "backHome": "Back to Home" + }, + "general": { + "title": "An Error Occurred", + "message": "Something unexpected happened. Please try again.", + "tryAgain": "Try Again" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "John Doe", + "designation": "Software Engineer" + }, + { + "name": "Jane Smith", + "designation": "Product Manager" + }, + { + "name": "Bob Johnson", + "designation": "Designer" + }, + { + "name": "Alice Brown", + "designation": "Developer" + } + ] + }, + "footer": { + "tagline": "Discover the best AI tools to boost your productivity.", + "product": { + "title": "Product", + "features": "Features", + "documentation": "Documentation" + }, + "company": { + "title": "Company", + "about": "About", + "blog": "Blog", + "careers": "Careers" + }, + "legal": { + "title": "Legal", + "privacy": "Privacy", + "terms": "Terms", + "cookies": "Cookies" + }, + "social": { + "title": "Social", + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + }, + "newsletter": { + "title": "Subscribe to Newsletter", + "description": "Get the latest updates and news directly in your inbox.", + "placeholder": "Enter your email", + "subscribe": "Subscribe", + "success": "Subscribed! Thanks for joining.", + "invalidEmail": "Please enter a valid email address.", + "error": "Subscription failed. Please try again." + } + }, + "tools": { + "title": "AI Tools Directory", + "subtitle": "Discover the best AI tools to boost your productivity", + "searchPlaceholder": "Search tools...", + "all": "All", + "foundTools": "Found {count} tools", + "visitWebsite": "Visit website", + "noTools": "No tools found", + "backToTools": "Back to tools", + "about": "About", + "categories": "Categories", + "tags": "Tags", + "visitButton": "Visit Website", + "toolInfo": "Tool Info", + "domain": "Domain", + "added": "Added", + "notFound": "Tool Not Found", + "favorites": { + "add": "Save to Favorites", + "remove": "Remove from Favorites", + "loginRequired": "Please sign in to save favorites", + "error": "Action failed. Please try again." + }, + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid" + }, + "categoryPage": { + "viewAll": "View all {count} tools" + }, + "reviewCta": "Ratings and reviews come from verified community members. Voted Helpful counts are shown next to each review.", + "alternatives": "Alternatives", + "seeAllAlternatives": "See all alternatives", + "stats": { + "votes": "Upvotes", + "views": "Views" + }, + "share": { + "share": "Share", + "copy": "Copy", + "copyLink": "Copy link", + "copied": "Link copied to clipboard" + }, + "sort": { + "latest": "Latest", + "trending": "Trending" + } + }, + "seo": { + "home": { + "title": "findai — The Minimal AI Tool Search Engine", + "description": "One search box, every AI tool. Describe what you're trying to do and find the right AI tool, ranked by the community.", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "Blog - Toolso.AI", + "description": "Latest insights, tutorials and updates about AI tools. Stay informed about the best AI tools and industry trends.", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "Contact Us - Toolso.AI", + "description": "Get in touch with us. We'd love to hear your feedback and tool suggestions.", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "Login - Toolso.AI", + "description": "Sign in to your account to submit tools, save favorites, and contribute to our AI tools directory.", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "Sign Up - Toolso.AI", + "description": "Create your account and start contributing to our AI tools directory. Submit tools and join our community.", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "Terms of Service - Toolso.AI", + "description": "Read our terms of service to understand the rules and guidelines for using Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "Privacy Policy - Toolso.AI", + "description": "Learn how we collect, use, and protect your personal information and data on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie Policy - Toolso.AI", + "description": "Understand how we use cookies and similar tracking technologies on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI Tools Directory - Discover the Best AI Tools", + "description": "Explore our curated collection of AI tools. Find the best AI tools for productivity, creativity, and more." + } + }, + "featuredTools": { + "title": "Featured Tools", + "subtitle": "Curated collection of AI tools to boost your productivity", + "visitWebsite": "Visit website", + "empty": "No tools yet. Add some in the admin panel.", + "viewAll": "View All Tools" + }, + "voting": { + "vote": "Upvote", + "voted": "Upvoted", + "unvote": "Remove vote", + "loginRequired": "Please sign in to vote — you'll be brought right back.", + "rateLimited": "Slow down a bit — too many votes in a short time.", + "error": "Vote failed. Please try again." + }, + "reviews": { + "title": "Reviews", + "writeReview": "Write a review", + "empty": "No reviews yet — be the first to share your experience.", + "loadMore": "Load more", + "loading": "Loading...", + "helpful": "Helpful", + "verifiedUser": "Verified user", + "pros": "Pros", + "cons": "Cons", + "yourRating": "Your rating", + "ratingRequired": "Please pick a star rating first.", + "titlePlaceholder": "Sum it up in one line (optional)", + "contentPlaceholder": "What did you use it for? How well does it work?", + "prosPlaceholder": "What do you like about it?", + "consPlaceholder": "What could be better?", + "useCasePlaceholder": "Your use case (e.g. social media content)", + "saving": "Saving...", + "submit": "Publish review", + "update": "Update review", + "cancel": "Cancel", + "delete": "Delete my review", + "deleted": "Review deleted", + "tooShort": "Review is a bit short — tell us at least a sentence.", + "error": "Could not save your review. Please try again.", + "basedOn": "Based on {count} reviews" + }, + "submission": { + "name": "Tool name", + "websiteUrl": "Website URL", + "tagline": "Tagline", + "taglinePlaceholder": "One-line pitch shown on cards", + "description": "Description", + "descriptionPlaceholder": "What does it do? Who is it for? What makes it different?", + "logoUrl": "Logo URL", + "category": "Category", + "pricingLabel": "Pricing model", + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid", + "freeTrial": "Free Trial", + "openSource": "Open Source", + "contact": "Contact for pricing" + }, + "founderName": "Founder / company", + "contactEmail": "Contact email", + "socialLinks": "Social links", + "note": "Notes for the editors", + "notePlaceholder": "Anything that helps us review faster (launch date, metrics...)", + "selectPlaceholder": "Select...", + "submit": "Submit for review", + "submitting": "Submitting...", + "submitted": "Submitted! We'll review it within 48 hours.", + "reviewNote": "Free listing · reviewed within 48h", + "duplicateFound": "Looks like this tool may already be listed:", + "duplicateBlocked": "This tool appears to be already listed. Duplicate submissions are not allowed.", + "error": "Submission failed. Please check your inputs." + }, + "claim": { + "claimThisTool": "Claim this tool", + "verifiedOwner": "Verified owner", + "formTitle": "Claim ownership of this listing", + "rolePlaceholder": "Your role (e.g. Founder, Marketing lead)", + "messagePlaceholder": "How should we verify you? (same-domain email, press page...)", + "proofPlaceholder": "Proof URL (optional)", + "submit": "Send claim", + "submitting": "Sending...", + "submitted": "Claim sent! We'll review it shortly.", + "pendingExists": "You already have a pending claim for this tool.", + "cancel": "Cancel", + "error": "Could not send your claim." + }, + "rankings": { + "title": "Community Rankings", + "subtitle": "Seven live leaderboards powered by votes, reviews, saves and engagement — not sponsored placement.", + "trending": "Trending", + "popular": "Popular", + "mostVoted": "Most Voted", + "mostSaved": "Most Saved", + "highestRated": "Highest Rated", + "new": "New", + "editorsChoice": "Editor's Choice", + "empty": "No tools on this board yet." + } +} diff --git a/sites/findai/messages/zh.json b/sites/findai/messages/zh.json new file mode 100644 index 0000000..49ff27c --- /dev/null +++ b/sites/findai/messages/zh.json @@ -0,0 +1,804 @@ +{ + "common": { + "brand": { + "name": "findai", + "tagline": "The minimal AI tool search engine.", + "copyright": "版权所有 © 2025", + "allRightsReserved": "保留所有权利" + }, + "actions": { + "signIn": "登录", + "signUp": "注册", + "signOut": "退出登录", + "getStarted": "开始使用", + "startFree": "免费开始", + "startTrial": "开始试用", + "contactSales": "联系销售", + "learnMore": "了解更多", + "viewAll": "查看全部", + "submit": "提交", + "cancel": "取消", + "save": "保存", + "delete": "删除", + "edit": "编辑", + "update": "更新", + "continue": "继续", + "back": "返回", + "next": "下一步" + }, + "status": { + "loading": "加载中...", + "verified": "已验证", + "pending": "待处理", + "active": "已激活", + "inactive": "未激活" + } + }, + "navigation": { + "main": { + "tools": "工具库", + "blog": "博客", + "contact": "联系我们", + "dashboard": "仪表盘", + "profile": "个人资料" + }, + "footer": { + "legal": { + "terms": "服务条款", + "privacy": "隐私政策", + "cookies": "Cookie 政策" + }, + "social": { + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "发现最好的 AI 工具", + "title": "findai — 极简 AI 工具搜索引擎", + "description": "一个搜索框,找遍全部 AI 工具。说出你想做的事,社区排名替你选。", + "cta": { + "primary": "探索工具", + "secondary": "阅读博客" + } + }, + "features": { + "title": "开始构建所需的一切", + "subtitle": "告别重复的样板代码。专注于你的独特功能,基础设施已为你准备就绪。", + "items": { + "aiOptimized": { + "title": "现代技术栈", + "description": "基于 Next.js 14、TypeScript、Tailwind CSS 和 PostgreSQL 构建。采用行业最佳实践和企业级架构。" + }, + "zeroPipeline": { + "title": "开箱即用的认证", + "description": "Better Auth 驱动的完整认证系统,支持邮箱密码和 OAuth 登录、邮箱验证、密码重置和会话管理。" + }, + "nonTechnical": { + "title": "管理后台", + "description": "功能齐全的管理面板,包含用户管理、角色权限控制和业务数据监控。轻松扩展满足你的需求。" + }, + "productionGrade": { + "title": "博客系统", + "description": "内置 MDX 博客系统,支持语法高亮、SEO 优化和国际化。非常适合内容营销和产品更新。" + } + } + }, + "testimonials": { + "title": "用户评价", + "subtitle": "来自使用 Toolso.AI 发现优质 AI 工具的真实用户反馈。", + "items": [ + { + "name": "张伟", + "quote": "Toolso.AI 帮我找到了完美的 AI 写作助手,分类清晰让发现变得非常简单!", + "designation": "内容创作者" + }, + { + "name": "王强", + "quote": "终于有了一个组织良好的 AI 工具目录,节省了我大量的研究时间。", + "designation": "产品经理" + }, + { + "name": "李娜", + "quote": "每周都能在 Toolso.AI 上发现新的 AI 工具,已经成为我探索 AI 的首选资源。", + "designation": "创业者" + }, + { + "name": "陈婷", + "quote": "搜索和筛选功能非常好用,几分钟就找到了我需要的工具。", + "designation": "软件工程师" + }, + { + "name": "赵明", + "quote": "喜欢中英文双语支持!可以轻松探索各种 AI 工具。", + "designation": "数字营销专家" + }, + { + "name": "朱悦", + "quote": "了解最新 AI 工具的好资源,博客板块也很有价值。", + "designation": "AI 研究员" + } + ] + }, + "companies": { + "title": "采用行业领先技术构建", + "subtitle": "基于现代技术栈,被全球顶尖团队信赖" + }, + "gridFeatures": { + "aiReady": { + "title": "可扩展架构", + "description": "模块化设计,轻松添加新功能。遵循 Next.js 最佳实践,便于维护。" + }, + "creem": { + "title": "邮件系统", + "description": "集成 Resend 邮件服务,支持交易邮件、验证邮件和新闻通讯。" + }, + "auth": { + "title": "身份认证", + "description": "Better Auth 提供邮箱密码和 OAuth 支持。会话管理和路由保护已就绪。" + }, + "deploy": { + "title": "一键部署", + "description": "即刻部署到 Vercel、Railway 或任何平台。从第一天起即可投入生产。" + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "现代技术栈包括 Next.js 14、TypeScript、Tailwind CSS 和 shadcn/ui 组件。" + }, + "database": { + "title": "数据库 + ORM", + "description": "PostgreSQL 配合 Drizzle ORM。类型安全的查询和迁移已配置。" + }, + "seo": { + "title": "SEO 和营销", + "description": "元标签、Open Graph、站点地图和分析。为有机增长准备的一切。" + }, + "vibeCoding": { + "title": "国际化支持", + "description": "内置中英文支持,使用 next-intl 实现。轻松添加更多语言。" + } + }, + "cta": { + "title": "找到最适合你的 AI 工具", + "description": "浏览精选 AI 工具集合,发现能帮助你提升效率的最佳工具。", + "button": "探索工具" + }, + "auth": { + "login": { + "title": "登录您的账户", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "forgotPassword": "忘记密码?", + "noAccount": "还没有账户?", + "signUpLink": "注册", + "signInButton": "登录", + "signingIn": "登录中...", + "errors": { + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "loginFailed": "登录失败,请重试。", + "googleLoginFailed": "Google 登录失败,请重试。" + } + }, + "signup": { + "title": "注册一个新账户", + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "hasAccount": "已经有账户了?", + "signInLink": "登录", + "signUpButton": "注册", + "signingUp": "注册中...", + "errors": { + "nameRequired": "请输入您的姓名", + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "signupFailed": "注册失败,请重试。", + "googleSignupFailed": "Google 注册失败,请重试。" + } + }, + "social": { + "googleSignIn": "使用 Google 继续", + "or": "或者继续使用", + "githubSignIn": "使用 GitHub 登录" + }, + "checkEmail": { + "title": "请查收您的邮件", + "description": "我们已向您的邮箱发送了验证链接。请点击链接验证您的账户并开始使用。", + "notReceived": "没有收到邮件?", + "checkSpam": "检查垃圾邮件文件夹", + "checkEmailCorrect": "确认输入的邮箱地址是否正确", + "waitAndCheck": "等待几分钟后再次查看", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件发送成功!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "backToLogin": "返回登录", + "securityNote": "为了您的安全,验证链接将在24小时后失效。" + }, + "verifyEmail": { + "verifying": "正在验证邮箱", + "verifyingDescription": "请稍候,我们正在验证您的邮箱地址...", + "success": "邮箱验证成功!", + "successDescription": "您的邮箱已成功验证!正在跳转到登录页面...", + "alreadyVerified": "已验证", + "failed": "验证失败", + "goToLogin": "前往登录", + "backToSignUp": "返回注册", + "requestNew": "重新发送验证邮件", + "checkSpamNote": "如果没有收到邮件,请检查垃圾邮件文件夹" + }, + "emailVerifiedGuard": { + "title": "需要验证邮箱", + "description": "请验证您的邮箱地址以访问此页面。请查收我们发送到以下邮箱的验证链接:", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件已发送!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "signOutLink": "退出并使用其他账户" + } + }, + "Admin": { + "sidebar": { + "title": "管理后台", + "subtitle": "系统管理", + "dashboard": "仪表板", + "tools": "工具管理", + "categories": "分类管理", + "tags": "标签管理", + "users": "用户管理", + "backToDashboard": "返回用户面板", + "submissions": "提交审核", + "claims": "认领审核", + "reviews": "评论审核", + "discovery": "发现管理", + "votes": "投票审计", + "analytics": "数据分析" + }, + "header": { + "welcome": "欢迎", + "adminBadge": "管理员" + }, + "dashboard": { + "title": "管理员仪表板", + "totalUsers": "总用户数", + "activeUsers": "活跃用户", + "recentUsers": "最近注册用户", + "viewAllUsers": "查看所有用户" + }, + "toolsManagement": { + "title": "工具管理", + "totalCount": "共 {count} 个工具", + "searchPlaceholder": "搜索工具名称或 slug...", + "allStatus": "全部状态", + "published": "已发布", + "draft": "草稿", + "addTool": "添加工具", + "tool": "工具", + "slug": "Slug", + "status": "状态", + "createdAt": "创建时间", + "actions": "操作", + "noData": "暂无工具数据", + "previous": "上一页", + "next": "下一页", + "confirmDelete": "确定要删除工具 \"{name}\" 吗?此操作不可恢复。", + "deleted": "工具已删除", + "deleteFailed": "删除失败", + "statusUpdated": "状态已更新", + "statusUpdateFailed": "状态更新失败", + "toDraft": "转为草稿", + "publish": "发布", + "edit": "编辑", + "visitWebsite": "访问网站", + "delete": "删除", + "modal": { + "editTitle": "编辑工具", + "addTitle": "添加工具", + "basicInfo": "基本信息", + "linksAndImages": "链接和图片", + "categories": "分类", + "tags": "标签", + "slug": "Slug", + "status": "状态", + "nameEn": "英文名称", + "nameZh": "中文名称", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "domain": "域名", + "websiteUrl": "网站链接", + "logoUrl": "Logo URL", + "coverImageUrl": "封面图 URL", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTool": "创建工具", + "requiredField": "请填写必填字段", + "updated": "工具已更新", + "created": "工具已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败", + "statusDraft": "草稿", + "statusPublished": "已发布", + "pricing": "定价", + "pricingNone": "未设置", + "pricingFree": "免费", + "pricingFreemium": "免费增值", + "pricingPaid": "付费", + "featured": "首页精选" + } + }, + "categoriesManagement": { + "title": "分类管理", + "addCategory": "添加分类", + "order": "排序", + "category": "分类", + "slug": "Slug", + "toolCount": "工具数", + "toolCountLabel": "{count} 个工具", + "actions": "操作", + "noData": "暂无分类数据", + "edit": "编辑", + "delete": "删除", + "cannotDelete": "该分类下有 {count} 个工具,无法删除", + "confirmDelete": "确定要删除分类 \"{name}\" 吗?", + "deleted": "分类已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑分类", + "addTitle": "添加分类", + "slug": "Slug", + "icon": "图标 (emoji)", + "nameEn": "英文名称", + "nameZh": "中文名称", + "sortOrder": "排序", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createCategory": "创建分类", + "requiredField": "请填写必填字段", + "updated": "分类已更新", + "created": "分类已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "tagsManagement": { + "title": "标签管理", + "searchPlaceholder": "搜索标签...", + "addTag": "添加标签", + "toolCountLabel": "{count} 个工具", + "noData": "暂无标签数据", + "edit": "编辑", + "delete": "删除", + "confirmDeleteWithTools": "该标签被 {count} 个工具使用,删除后这些工具将失去该标签。确定要删除吗?", + "confirmDelete": "确定要删除标签 \"{name}\" 吗?", + "deleted": "标签已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑标签", + "addTitle": "添加标签", + "slug": "Slug", + "nameEn": "英文名称", + "nameZh": "中文名称", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTag": "创建标签", + "requiredField": "请填写必填字段", + "updated": "标签已更新", + "created": "标签已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "users": { + "searchPlaceholder": "搜索用户姓名或邮箱...", + "user": "用户", + "role": "角色", + "status": "状态", + "joined": "加入时间", + "actions": "操作", + "admin": "管理员", + "banned": "已禁用", + "active": "活跃", + "unverified": "未验证", + "edit": "编辑", + "ban": "禁用", + "unban": "解禁", + "viewDetails": "查看详情", + "banReason": "禁用原因", + "banExpires": "禁用到期", + "userDetails": "用户详情", + "name": "姓名", + "email": "邮箱", + "emailVerified": "邮箱验证", + "verified": "已验证", + "lastActive": "最后活跃", + "close": "关闭", + "roleUpdated": "角色已更新", + "roleUpdateFailed": "角色更新失败", + "userBanned": "用户已禁用", + "userUnbanned": "用户已解禁", + "banFailed": "禁用操作失败", + "pagination": { + "previous": "上一页", + "next": "下一页", + "page": "第 {current} / {total} 页" + }, + "cancel": "取消" + } + }, + "dashboard": { + "title": "仪表盘", + "welcome": "欢迎回来", + "cards": { + "personalInfo": { + "title": "个人信息", + "labels": { + "name": "姓名", + "email": "邮箱", + "status": "状态", + "notSet": "未设置" + } + }, + "quickActions": { + "title": "快捷操作", + "editProfile": "编辑个人资料", + "accountSettings": "账户设置", + "securitySettings": "安全设置" + } + }, + "favorites": { + "title": "我的收藏", + "empty": "还没有收藏的工具。", + "browseTools": "去浏览工具并收藏" + } + }, + "profile": { + "title": "个人资料", + "subtitle": "管理您的账户设置和偏好", + "sections": { + "basicInfo": { + "title": "基本信息", + "fullName": "姓名", + "email": "邮箱地址", + "verificationStatus": "验证状态", + "notSet": "未设置", + "nameNotSet": "姓名未设置", + "accountId": "账户 ID" + }, + "accountSettings": { + "title": "账户详情", + "memberSince": "注册于", + "lastLogin": "最近登录", + "accountType": "账户类型" + } + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "请输入您的姓名", + "emailLabel": "邮箱", + "emailPlaceholder": "请输入您的邮箱地址", + "updateButton": "更新资料", + "updating": "更新中...", + "updateSuccess": "个人资料更新成功", + "updateError": "个人资料更新失败" + } + }, + "contact": { + "title": "联系我们", + "subtitle": "我们很乐意倾听您的声音。给我们发送消息,我们会尽快回复。", + "description": "请联系我们,我们会尽快回复。", + "testimonial": { + "title": "帮助用户发现最佳 AI 工具", + "description": "Toolso.AI 致力于为用户提供精选的 AI 工具目录,帮助大家找到最适合的 AI 助手。" + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "companyLabel": "公司", + "companyPlaceholder": "某某科技有限公司", + "messageLabel": "消息", + "messagePlaceholder": "请在此处输入您的消息", + "submitButton": "提交", + "submitting": "发送中...", + "submitSuccess": "消息发送成功!", + "submitError": "消息发送失败,请重试。" + } + }, + "blog": { + "title": "博客", + "subtitle": "来自我们团队的最新见解与更新", + "readMore": "阅读更多", + "minRead": "分钟阅读" + }, + "errors": { + "404": { + "title": "404 - 页面未找到", + "message": "您正在寻找的页面不存在。", + "backHome": "返回首页" + }, + "500": { + "title": "出错了", + "message": "我们遇到了一些技术问题,请稍后重试。", + "backHome": "返回首页" + }, + "general": { + "title": "发生错误", + "message": "发生了一些意外情况,请重试。", + "tryAgain": "重试" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "张伟", + "designation": "软件工程师" + }, + { + "name": "王强", + "designation": "产品经理" + }, + { + "name": "李娜", + "designation": "数据科学家" + }, + { + "name": "陈婷", + "designation": "UX设计师" + }, + { + "name": "赵明", + "designation": "全栈开发者" + }, + { + "name": "朱悦", + "designation": "独立开发者" + } + ] + }, + "footer": { + "tagline": "发现最好的 AI 工具,提升你的工作效率。", + "product": { + "title": "产品", + "features": "功能", + "documentation": "文档" + }, + "company": { + "title": "公司", + "about": "关于我们", + "blog": "博客", + "careers": "招聘" + }, + "legal": { + "title": "法律", + "privacy": "隐私政策", + "terms": "服务条款", + "cookies": "Cookie 政策" + }, + "social": { + "title": "社交", + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + }, + "newsletter": { + "title": "订阅邮件", + "description": "获取最新动态和资讯,直接发送到您的邮箱。", + "placeholder": "输入您的邮箱", + "subscribe": "订阅", + "success": "订阅成功!感谢加入。", + "invalidEmail": "请输入有效的邮箱地址。", + "error": "订阅失败,请重试。" + } + }, + "tools": { + "title": "AI 工具库", + "subtitle": "发现最好的 AI 工具,提升您的工作效率", + "searchPlaceholder": "搜索工具...", + "all": "全部", + "foundTools": "共找到 {count} 个工具", + "visitWebsite": "访问网站", + "noTools": "暂无工具", + "backToTools": "返回工具列表", + "about": "介绍", + "categories": "分类", + "tags": "标签", + "visitButton": "访问网站", + "toolInfo": "工具信息", + "domain": "域名", + "added": "添加时间", + "notFound": "工具未找到", + "favorites": { + "add": "收藏", + "remove": "取消收藏", + "loginRequired": "请先登录后再收藏", + "error": "操作失败,请重试。" + }, + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费" + }, + "categoryPage": { + "viewAll": "查看该分类全部 {count} 个工具" + }, + "reviewCta": "评分与评论来自已验证的社区用户,每条评论旁展示“有用”计数。", + "alternatives": "替代品", + "seeAllAlternatives": "查看全部替代品", + "stats": { + "votes": "票数", + "views": "浏览量" + }, + "share": { + "share": "分享", + "copy": "复制", + "copyLink": "复制链接", + "copied": "链接已复制" + }, + "sort": { + "latest": "最新", + "trending": "最热" + } + }, + "seo": { + "home": { + "title": "findai — 极简 AI 工具搜索引擎", + "description": "一个搜索框,找遍全部 AI 工具。说出你想做的事,社区排名替你选。", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "博客 - Toolso.AI", + "description": "关于 AI 工具的最新资讯、教程和更新。了解最佳 AI 工具和行业趋势。", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "联系我们 - Toolso.AI", + "description": "与我们取得联系。我们期待听到您的反馈和工具推荐建议。", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "登录 - Toolso.AI", + "description": "登录您的账户,提交工具、收藏喜爱的工具,为 AI 工具目录做贡献。", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "注册 - Toolso.AI", + "description": "创建您的账户,开始为 AI 工具目录做贡献。提交工具、加入我们的社区。", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "服务条款 - Toolso.AI", + "description": "阅读我们的服务条款,了解使用 Toolso.AI 的规则和指南。", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "隐私政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上收集、使用和保护您的个人信息和数据。", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie 政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上使用 cookies 和类似的跟踪技术。", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI 工具库 - 发现最好的 AI 工具", + "description": "浏览精选的 AI 工具集合。找到提升效率、激发创意的最佳 AI 工具。" + } + }, + "featuredTools": { + "title": "精选工具", + "subtitle": "精选优质 AI 工具,助力提升工作效率", + "visitWebsite": "访问网站", + "empty": "暂无工具,请先在后台添加", + "viewAll": "查看全部工具" + }, + "voting": { + "vote": "投票", + "voted": "已投", + "unvote": "取消投票", + "loginRequired": "投票需要先登录,登录后会自动回到本页。", + "rateLimited": "操作太快了,请稍后再试。", + "error": "投票失败,请重试。" + }, + "reviews": { + "title": "用户评论", + "writeReview": "写评论", + "empty": "还没有评论——来分享你的使用体验吧。", + "loadMore": "加载更多", + "loading": "加载中...", + "helpful": "有用", + "verifiedUser": "已验证用户", + "pros": "优点", + "cons": "缺点", + "yourRating": "你的评分", + "ratingRequired": "请先选择星级评分。", + "titlePlaceholder": "一句话总结(可选)", + "contentPlaceholder": "你用它做什么?效果如何?", + "prosPlaceholder": "它哪里做得好?", + "consPlaceholder": "哪里还可以改进?", + "useCasePlaceholder": "你的使用场景(如 社媒内容创作)", + "saving": "保存中...", + "submit": "发布评论", + "update": "更新评论", + "cancel": "取消", + "delete": "删除我的评论", + "deleted": "评论已删除", + "tooShort": "评论有点短——至少写一句话吧。", + "error": "评论保存失败,请重试。", + "basedOn": "共 {count} 条评论" + }, + "submission": { + "name": "工具名称", + "websiteUrl": "官网地址", + "tagline": "一句话简介", + "taglinePlaceholder": "展示在卡片上的一句话卖点", + "description": "详细介绍", + "descriptionPlaceholder": "它是做什么的?适合谁?有什么不同?", + "logoUrl": "Logo 地址", + "category": "分类", + "pricingLabel": "定价模式", + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费", + "freeTrial": "免费试用", + "openSource": "开源", + "contact": "联系定价" + }, + "founderName": "创始人 / 公司", + "contactEmail": "联系邮箱", + "socialLinks": "社交链接", + "note": "给编辑的备注", + "notePlaceholder": "任何能加快审核的信息(上线时间、数据等)", + "selectPlaceholder": "请选择...", + "submit": "提交审核", + "submitting": "提交中...", + "submitted": "已提交!我们会在 48 小时内完成审核。", + "reviewNote": "免费收录 · 48 小时内审核", + "duplicateFound": "这个工具可能已经被收录:", + "duplicateBlocked": "该工具似乎已被收录,不允许重复提交。", + "error": "提交失败,请检查填写内容。" + }, + "claim": { + "claimThisTool": "认领此工具", + "verifiedOwner": "已认证所有者", + "formTitle": "认领该收录页的所有权", + "rolePlaceholder": "你的身份(如 创始人、市场负责人)", + "messagePlaceholder": "我们如何验证你的身份?(同域名邮箱、官方报道页等)", + "proofPlaceholder": "证明链接(可选)", + "submit": "发送认领申请", + "submitting": "发送中...", + "submitted": "认领申请已发送,我们会尽快审核。", + "pendingExists": "你已有一条待审核的认领申请。", + "cancel": "取消", + "error": "认领申请发送失败。" + }, + "rankings": { + "title": "社区榜单", + "subtitle": "七个实时榜单由投票、评论、收藏与互动数据驱动——不接受赞助排名。", + "trending": "趋势榜", + "popular": "热门榜", + "mostVoted": "最多投票", + "mostSaved": "最多收藏", + "highestRated": "最高评分", + "new": "最新收录", + "editorsChoice": "编辑精选", + "empty": "该榜单暂无工具。" + } +} diff --git a/sites/findai/next.config.mjs b/sites/findai/next.config.mjs new file mode 100644 index 0000000..84f2b3e --- /dev/null +++ b/sites/findai/next.config.mjs @@ -0,0 +1,5 @@ +import createSiteConfig from "@aidir/core/next-config"; + +export default createSiteConfig({ + requestPath: "./src/i18n/request.ts", +}); diff --git a/sites/findai/package.json b/sites/findai/package.json new file mode 100644 index 0000000..40c7fb0 --- /dev/null +++ b/sites/findai/package.json @@ -0,0 +1,34 @@ +{ + "name": "site-findai", + "version": "1.0.0", + "description": "findai — AI directory site powered by @aidir/core", + "private": true, + "scripts": { + "dev": "next dev -p 3005", + "build": "next build", + "start": "next start -p 3005", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@aidir/core": "workspace:*", + "next": "16.1.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "sonner": "^2.0.7", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "framer-motion": "^12.43.0" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@types/mdx": "^2.0.13", + "typescript": "^5", + "tailwindcss": "^3.4.1", + "postcss": "^8" + } +} diff --git a/sites/findai/postcss.config.mjs b/sites/findai/postcss.config.mjs new file mode 100644 index 0000000..a06f589 --- /dev/null +++ b/sites/findai/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/sites/findai/public/avatar.jpeg b/sites/findai/public/avatar.jpeg new file mode 100644 index 0000000..5f84d25 Binary files /dev/null and b/sites/findai/public/avatar.jpeg differ diff --git a/sites/findai/public/banner.png b/sites/findai/public/banner.png new file mode 100644 index 0000000..1913b5c Binary files /dev/null and b/sites/findai/public/banner.png differ diff --git a/sites/findai/public/icon-192.png b/sites/findai/public/icon-192.png new file mode 100644 index 0000000..7c35646 Binary files /dev/null and b/sites/findai/public/icon-192.png differ diff --git a/sites/findai/public/icon-512.png b/sites/findai/public/icon-512.png new file mode 100644 index 0000000..9dcae12 Binary files /dev/null and b/sites/findai/public/icon-512.png differ diff --git a/sites/findai/public/icon.svg b/sites/findai/public/icon.svg new file mode 100644 index 0000000..514e5ff --- /dev/null +++ b/sites/findai/public/icon.svg @@ -0,0 +1 @@ +F diff --git a/sites/findai/public/noise.webp b/sites/findai/public/noise.webp new file mode 100644 index 0000000..8349904 Binary files /dev/null and b/sites/findai/public/noise.webp differ diff --git a/sites/findai/public/og-image.png b/sites/findai/public/og-image.png new file mode 100644 index 0000000..6962af5 Binary files /dev/null and b/sites/findai/public/og-image.png differ diff --git a/sites/findai/public/robots.txt b/sites/findai/public/robots.txt new file mode 100644 index 0000000..9f21055 --- /dev/null +++ b/sites/findai/public/robots.txt @@ -0,0 +1,24 @@ +# robots.txt for Toolso.AI - AI Tools Directory +# https://toolso.ai + +User-agent: * +Allow: / + +# Disallow admin and API pages +Disallow: /admin/ +Disallow: /api/ + +# Disallow authentication pages +Disallow: /*/signup +Disallow: /*/login +Disallow: /*/check-email +Disallow: /*/verify-email +Disallow: /*/forgot-password +Disallow: /*/reset-password + +# Disallow protected user pages +Disallow: /*/dashboard +Disallow: /*/profile + +# Sitemap location +Sitemap: https://toolso.ai/sitemap.xml diff --git a/sites/findai/public/skeleton-one.png b/sites/findai/public/skeleton-one.png new file mode 100644 index 0000000..9734078 Binary files /dev/null and b/sites/findai/public/skeleton-one.png differ diff --git a/sites/findai/public/tyler.jpeg b/sites/findai/public/tyler.jpeg new file mode 100644 index 0000000..667f0dc Binary files /dev/null and b/sites/findai/public/tyler.jpeg differ diff --git a/sites/findai/src/app/[locale]/(admin)/admin/analytics/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/analytics/page.tsx new file mode 100644 index 0000000..0586ba2 --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/analytics/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/analytics/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/analytics/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/categories/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/categories/page.tsx new file mode 100644 index 0000000..4b50d6c --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/categories/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/categories/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/categories/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/claims/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/claims/page.tsx new file mode 100644 index 0000000..a3fe61d --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/claims/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/claims/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/claims/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/discovery/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/discovery/page.tsx new file mode 100644 index 0000000..bb70237 --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/discovery/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/discovery/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/discovery/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/page.tsx new file mode 100644 index 0000000..df0a27b --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/reviews/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/reviews/page.tsx new file mode 100644 index 0000000..a42f9ac --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/reviews/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/reviews/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/reviews/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/submissions/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/submissions/page.tsx new file mode 100644 index 0000000..7ff5ca4 --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/submissions/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/submissions/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/submissions/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/tags/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/tags/page.tsx new file mode 100644 index 0000000..516f034 --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/tags/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tags/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tags/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/tools/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/tools/page.tsx new file mode 100644 index 0000000..364ce24 --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tools/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tools/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/users/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/users/page.tsx new file mode 100644 index 0000000..f6c4ba4 --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/users/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/users/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/users/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/admin/votes/page.tsx b/sites/findai/src/app/[locale]/(admin)/admin/votes/page.tsx new file mode 100644 index 0000000..32fd76c --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/admin/votes/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(admin)/admin/votes/page.tsx 的薄路由 +export const revalidate = 0; +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/votes/page"; diff --git a/sites/findai/src/app/[locale]/(admin)/layout.tsx b/sites/findai/src/app/[locale]/(admin)/layout.tsx new file mode 100644 index 0000000..d58cb83 --- /dev/null +++ b/sites/findai/src/app/[locale]/(admin)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/layout"; diff --git a/sites/findai/src/app/[locale]/(auth)/forgot-password/page.tsx b/sites/findai/src/app/[locale]/(auth)/forgot-password/page.tsx new file mode 100644 index 0000000..737bb95 --- /dev/null +++ b/sites/findai/src/app/[locale]/(auth)/forgot-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/forgot-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/forgot-password/page"; diff --git a/sites/findai/src/app/[locale]/(auth)/layout.tsx b/sites/findai/src/app/[locale]/(auth)/layout.tsx new file mode 100644 index 0000000..2d015d0 --- /dev/null +++ b/sites/findai/src/app/[locale]/(auth)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/layout"; diff --git a/sites/findai/src/app/[locale]/(auth)/login/page.tsx b/sites/findai/src/app/[locale]/(auth)/login/page.tsx new file mode 100644 index 0000000..524b156 --- /dev/null +++ b/sites/findai/src/app/[locale]/(auth)/login/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/login/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/login/page"; diff --git a/sites/findai/src/app/[locale]/(auth)/reset-password/page.tsx b/sites/findai/src/app/[locale]/(auth)/reset-password/page.tsx new file mode 100644 index 0000000..69c68f4 --- /dev/null +++ b/sites/findai/src/app/[locale]/(auth)/reset-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/reset-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/reset-password/page"; diff --git a/sites/findai/src/app/[locale]/(auth)/signup/page.tsx b/sites/findai/src/app/[locale]/(auth)/signup/page.tsx new file mode 100644 index 0000000..414f955 --- /dev/null +++ b/sites/findai/src/app/[locale]/(auth)/signup/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/signup/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/signup/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx b/sites/findai/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx new file mode 100644 index 0000000..1e24e74 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/[slug]/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/ai-tools-for/page.tsx b/sites/findai/src/app/[locale]/(marketing)/ai-tools-for/page.tsx new file mode 100644 index 0000000..e17e80b --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/ai-tools-for/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/best/[slug]/page.tsx b/sites/findai/src/app/[locale]/(marketing)/best/[slug]/page.tsx new file mode 100644 index 0000000..a4f396b --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/best/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/[slug]/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/best/page.tsx b/sites/findai/src/app/[locale]/(marketing)/best/page.tsx new file mode 100644 index 0000000..af741b7 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/best/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/blog/[slug]/page.tsx b/sites/findai/src/app/[locale]/(marketing)/blog/[slug]/page.tsx new file mode 100644 index 0000000..ddcaf5c --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/blog/[slug]/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/[slug]/page.tsx 的薄路由 +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/[slug]/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/blog/page.tsx b/sites/findai/src/app/[locale]/(marketing)/blog/page.tsx new file mode 100644 index 0000000..e0aaa51 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/blog/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/category/[slug]/page.tsx b/sites/findai/src/app/[locale]/(marketing)/category/[slug]/page.tsx new file mode 100644 index 0000000..67bc8b7 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/category/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/category/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/category/[slug]/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/contact/page.tsx b/sites/findai/src/app/[locale]/(marketing)/contact/page.tsx new file mode 100644 index 0000000..38cf0af --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/contact/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/contact/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/contact/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/cookies/page.tsx b/sites/findai/src/app/[locale]/(marketing)/cookies/page.tsx new file mode 100644 index 0000000..6e27f11 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/cookies/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/cookies/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/cookies/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/layout.tsx b/sites/findai/src/app/[locale]/(marketing)/layout.tsx new file mode 100644 index 0000000..0602321 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/layout.tsx @@ -0,0 +1,4 @@ +import { createMarketingLayout } from "@aidir/core/kit/create-marketing-layout"; +import { siteConfig } from "@/site/brand"; + +export default createMarketingLayout(siteConfig); diff --git a/sites/findai/src/app/[locale]/(marketing)/page.tsx b/sites/findai/src/app/[locale]/(marketing)/page.tsx new file mode 100644 index 0000000..0afcbb9 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/page.tsx @@ -0,0 +1,9 @@ +import { createHomePage, createHomeMetadata } from "@aidir/core/kit/create-home"; +import { siteConfig } from "@/site/brand"; +import { SiteHome } from "@/site/home"; + +// 首页内容变化不频繁,ISR 每小时再生 +export const revalidate = 3600; + +export const generateMetadata = createHomeMetadata(siteConfig); +export default createHomePage(siteConfig, SiteHome); diff --git a/sites/findai/src/app/[locale]/(marketing)/privacy/page.tsx b/sites/findai/src/app/[locale]/(marketing)/privacy/page.tsx new file mode 100644 index 0000000..ab85a20 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/privacy/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/privacy/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/privacy/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/rankings/page.tsx b/sites/findai/src/app/[locale]/(marketing)/rankings/page.tsx new file mode 100644 index 0000000..1b7854c --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/rankings/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/rankings/page.tsx 的薄路由 +export const revalidate = 1800; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/rankings/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/submit/page.tsx b/sites/findai/src/app/[locale]/(marketing)/submit/page.tsx new file mode 100644 index 0000000..5cd1d96 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/submit/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/submit/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/submit/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/terms/page.tsx b/sites/findai/src/app/[locale]/(marketing)/terms/page.tsx new file mode 100644 index 0000000..588ebc3 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/terms/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/terms/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/terms/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/tools/[slug]/page.tsx b/sites/findai/src/app/[locale]/(marketing)/tools/[slug]/page.tsx new file mode 100644 index 0000000..c88bbd2 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/tools/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/tools/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/[slug]/page"; diff --git a/sites/findai/src/app/[locale]/(marketing)/tools/page.tsx b/sites/findai/src/app/[locale]/(marketing)/tools/page.tsx new file mode 100644 index 0000000..ef24d90 --- /dev/null +++ b/sites/findai/src/app/[locale]/(marketing)/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/tools/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/page"; diff --git a/sites/findai/src/app/[locale]/(protected)/dashboard/page.tsx b/sites/findai/src/app/[locale]/(protected)/dashboard/page.tsx new file mode 100644 index 0000000..20940ed --- /dev/null +++ b/sites/findai/src/app/[locale]/(protected)/dashboard/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/dashboard/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/dashboard/page"; diff --git a/sites/findai/src/app/[locale]/(protected)/layout.tsx b/sites/findai/src/app/[locale]/(protected)/layout.tsx new file mode 100644 index 0000000..9e15378 --- /dev/null +++ b/sites/findai/src/app/[locale]/(protected)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/layout"; diff --git a/sites/findai/src/app/[locale]/(protected)/profile/page.tsx b/sites/findai/src/app/[locale]/(protected)/profile/page.tsx new file mode 100644 index 0000000..cf5ba66 --- /dev/null +++ b/sites/findai/src/app/[locale]/(protected)/profile/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/profile/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/profile/page"; diff --git a/sites/findai/src/app/[locale]/check-email/page.tsx b/sites/findai/src/app/[locale]/check-email/page.tsx new file mode 100644 index 0000000..0cf4d63 --- /dev/null +++ b/sites/findai/src/app/[locale]/check-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/check-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/check-email/page"; diff --git a/sites/findai/src/app/[locale]/layout.tsx b/sites/findai/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..5141337 --- /dev/null +++ b/sites/findai/src/app/[locale]/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/layout.tsx 的薄路由 +export { default, generateStaticParams } from "@aidir/core/pages/[locale]/layout"; diff --git a/sites/findai/src/app/[locale]/verify-email/page.tsx b/sites/findai/src/app/[locale]/verify-email/page.tsx new file mode 100644 index 0000000..28f07f2 --- /dev/null +++ b/sites/findai/src/app/[locale]/verify-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/verify-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/verify-email/page"; diff --git a/sites/findai/src/app/api/auth/[...all]/route.ts b/sites/findai/src/app/api/auth/[...all]/route.ts new file mode 100644 index 0000000..3ad325b --- /dev/null +++ b/sites/findai/src/app/api/auth/[...all]/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/[...all]/route.ts 的薄路由 +export { POST, GET } from "@aidir/core/pages/api/auth/[...all]/route"; diff --git a/sites/findai/src/app/api/auth/forgot-password/route.ts b/sites/findai/src/app/api/auth/forgot-password/route.ts new file mode 100644 index 0000000..04090fd --- /dev/null +++ b/sites/findai/src/app/api/auth/forgot-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/forgot-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/forgot-password/route"; diff --git a/sites/findai/src/app/api/auth/resend-verification/route.ts b/sites/findai/src/app/api/auth/resend-verification/route.ts new file mode 100644 index 0000000..4e8ce70 --- /dev/null +++ b/sites/findai/src/app/api/auth/resend-verification/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/resend-verification/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/resend-verification/route"; diff --git a/sites/findai/src/app/api/auth/reset-password/route.ts b/sites/findai/src/app/api/auth/reset-password/route.ts new file mode 100644 index 0000000..652eba4 --- /dev/null +++ b/sites/findai/src/app/api/auth/reset-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/reset-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/reset-password/route"; diff --git a/sites/findai/src/app/api/auth/verify-email/route.ts b/sites/findai/src/app/api/auth/verify-email/route.ts new file mode 100644 index 0000000..c658aab --- /dev/null +++ b/sites/findai/src/app/api/auth/verify-email/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-email/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-email/route"; diff --git a/sites/findai/src/app/api/auth/verify-reset-token/route.ts b/sites/findai/src/app/api/auth/verify-reset-token/route.ts new file mode 100644 index 0000000..02b6c76 --- /dev/null +++ b/sites/findai/src/app/api/auth/verify-reset-token/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-reset-token/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-reset-token/route"; diff --git a/sites/findai/src/app/api/newsletter/unsubscribe/route.ts b/sites/findai/src/app/api/newsletter/unsubscribe/route.ts new file mode 100644 index 0000000..5bee9b9 --- /dev/null +++ b/sites/findai/src/app/api/newsletter/unsubscribe/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/newsletter/unsubscribe/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/newsletter/unsubscribe/route"; diff --git a/sites/findai/src/app/api/outbound/route.ts b/sites/findai/src/app/api/outbound/route.ts new file mode 100644 index 0000000..fa3a252 --- /dev/null +++ b/sites/findai/src/app/api/outbound/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/outbound/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/outbound/route"; diff --git a/sites/findai/src/app/api/search/route.ts b/sites/findai/src/app/api/search/route.ts new file mode 100644 index 0000000..d3f1006 --- /dev/null +++ b/sites/findai/src/app/api/search/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/search/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/search/route"; diff --git a/sites/findai/src/app/api/tools/[id]/vote/route.ts b/sites/findai/src/app/api/tools/[id]/vote/route.ts new file mode 100644 index 0000000..56e4b5f --- /dev/null +++ b/sites/findai/src/app/api/tools/[id]/vote/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/tools/[id]/vote/route.ts 的薄路由 +export { POST, DELETE } from "@aidir/core/pages/api/tools/[id]/vote/route"; diff --git a/sites/findai/src/app/api/upload/image/route.ts b/sites/findai/src/app/api/upload/image/route.ts new file mode 100644 index 0000000..bce8a93 --- /dev/null +++ b/sites/findai/src/app/api/upload/image/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/image/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/image/route"; diff --git a/sites/findai/src/app/api/upload/simple/route.ts b/sites/findai/src/app/api/upload/simple/route.ts new file mode 100644 index 0000000..665aa2b --- /dev/null +++ b/sites/findai/src/app/api/upload/simple/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/simple/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/simple/route"; diff --git a/sites/findai/src/app/api/user/admin-status/route.ts b/sites/findai/src/app/api/user/admin-status/route.ts new file mode 100644 index 0000000..46244da --- /dev/null +++ b/sites/findai/src/app/api/user/admin-status/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/admin-status/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/admin-status/route"; diff --git a/sites/findai/src/app/api/user/profile/route.ts b/sites/findai/src/app/api/user/profile/route.ts new file mode 100644 index 0000000..3ddc7ff --- /dev/null +++ b/sites/findai/src/app/api/user/profile/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/profile/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/profile/route"; diff --git a/sites/findai/src/app/layout.tsx b/sites/findai/src/app/layout.tsx new file mode 100644 index 0000000..01115cc --- /dev/null +++ b/sites/findai/src/app/layout.tsx @@ -0,0 +1,3 @@ +import "@aidir/core/styles/globals.css"; + +export { default } from "@aidir/core/pages/app-layout"; diff --git a/sites/findai/src/app/manifest.ts b/sites/findai/src/app/manifest.ts new file mode 100644 index 0000000..c7fc70b --- /dev/null +++ b/sites/findai/src/app/manifest.ts @@ -0,0 +1,2 @@ +// 自动生成:manifest.ts 的薄路由 +export { default } from "@aidir/core/pages/manifest"; diff --git a/sites/findai/src/app/not-found.tsx b/sites/findai/src/app/not-found.tsx new file mode 100644 index 0000000..cb56be7 --- /dev/null +++ b/sites/findai/src/app/not-found.tsx @@ -0,0 +1,2 @@ +// 自动生成:not-found.tsx 的薄路由 +export { default } from "@aidir/core/pages/not-found"; diff --git a/sites/findai/src/app/sitemap.ts b/sites/findai/src/app/sitemap.ts new file mode 100644 index 0000000..c773151 --- /dev/null +++ b/sites/findai/src/app/sitemap.ts @@ -0,0 +1,2 @@ +// 自动生成:sitemap.ts 的薄路由 +export { default } from "@aidir/core/pages/sitemap"; diff --git a/sites/findai/src/i18n/request.ts b/sites/findai/src/i18n/request.ts new file mode 100644 index 0000000..7056c85 --- /dev/null +++ b/sites/findai/src/i18n/request.ts @@ -0,0 +1,37 @@ +import { getRequestConfig } from "next-intl/server"; +import { notFound } from "next/navigation"; +import { locales, defaultLocale, type Locale } from "@aidir/core/i18n.config"; + +/** 站点品牌 SEO 文案覆盖(每个网站不同) */ +const brandMessages = { + en: { + seo: { home: {"title":"findai — The Minimal AI Tool Search Engine","description":"One search box, every AI tool. Describe what you're trying to do and find the right AI tool, ranked by the community.","ogImage":"/og-image.png"} }, + hero: { title: "findai — The Minimal AI Tool Search Engine", description: "One search box, every AI tool. Describe what you're trying to do and find the right AI tool, ranked by the community." }, + common: { brand: { name: "findai", tagline: "The minimal AI tool search engine." } }, + }, + zh: { + seo: { home: {"title":"findai — 极简 AI 工具搜索引擎","description":"一个搜索框,找遍全部 AI 工具。说出你想做的事,社区排名替你选。","ogImage":"/og-image.png"} }, + hero: { title: "findai — 极简 AI 工具搜索引擎", description: "一个搜索框,找遍全部 AI 工具。说出你想做的事,社区排名替你选。" }, + common: { brand: { name: "findai", tagline: "The minimal AI tool search engine." } }, + }, +} as const; + +export default getRequestConfig(async ({ requestLocale }) => { + let locale = await requestLocale; + if (!locale || !locales.includes(locale as Locale)) { + locale = defaultLocale; + } + try { + // 底座基础文案 + 站点品牌覆盖(浅合并到顶层命名空间) + const base = (await import(`../../messages/${locale}.json`)).default; + const override = brandMessages[locale as keyof typeof brandMessages]; + const messages = { ...base }; + for (const [ns, value] of Object.entries(override)) { + messages[ns] = { ...(messages[ns] ?? {}), ...value }; + } + return { locale, messages }; + } catch (error) { + console.error("Error loading messages for locale:", locale, error); + notFound(); + } +}); diff --git a/sites/findai/src/proxy.ts b/sites/findai/src/proxy.ts new file mode 100644 index 0000000..eec3c1e --- /dev/null +++ b/sites/findai/src/proxy.ts @@ -0,0 +1,10 @@ +import { proxy } from "@aidir/core/proxy"; + +export default proxy; + +export const config = { + matcher: [ + "/", + "/((?!api|_next|_vercel|.*\\..*).*)" + ] +}; diff --git a/sites/findai/src/site/brand.tsx b/sites/findai/src/site/brand.tsx new file mode 100644 index 0000000..210aa03 --- /dev/null +++ b/sites/findai/src/site/brand.tsx @@ -0,0 +1,78 @@ +import type { SiteConfig } from "@/kit/types"; + +// findai —— 独立站点的全部品牌/导航/页脚配置 +export const siteConfig: SiteConfig = { + "port": 3005, + "brand": { + "name": "findai", + "tagline": "The minimal AI tool search engine.", + "headline": "What are you trying to do?", + "subheadline": "" + }, + "navItems": [ + { + "label": "Search", + "href": "/tools" + }, + { + "label": "Use Cases", + "href": "/ai-tools-for" + }, + { + "label": "Rankings", + "href": "/rankings" + }, + { + "label": "Submit", + "href": "/submit" + } + ], + "footerGroups": [ + { + "title": "Search", + "links": [ + { + "label": "All Tools", + "href": "/tools" + }, + { + "label": "Use Cases", + "href": "/ai-tools-for" + }, + { + "label": "Rankings", + "href": "/rankings" + } + ] + }, + { + "title": "About", + "links": [ + { + "label": "Submit a Tool", + "href": "/submit" + }, + { + "label": "Privacy", + "href": "/privacy" + }, + { + "label": "Terms", + "href": "/terms" + } + ] + } + ], + "searchPlaceholder": "What do you need?", + "seo": { + "en": { + "title": "findai — The Minimal AI Tool Search Engine", + "description": "One search box, every AI tool. Describe what you're trying to do and find the right AI tool, ranked by the community." + }, + "zh": { + "title": "findai — 极简 AI 工具搜索引擎", + "description": "一个搜索框,找遍全部 AI 工具。说出你想做的事,社区排名替你选。" + } + }, + "id": "findai" +}; diff --git a/sites/findai/src/site/home.tsx b/sites/findai/src/site/home.tsx new file mode 100644 index 0000000..9644782 --- /dev/null +++ b/sites/findai/src/site/home.tsx @@ -0,0 +1,107 @@ +// 自动生成:站点首页组件(源自底座 minimal 形态,品牌来自 @/site/brand) +import { siteConfig } from "@/site/brand"; +import { Search } from "lucide-react"; +import { ToolCardGrid } from "@/components/tool-card"; +import { LocaleLink } from "@/components/locale-link"; +import { getHomeDataSafe } from "@/kit/home-data"; + +/** Minimal:极简 AI 搜索引擎(一个框,一个任务) */ + + +const navItems = [ + { label: "Search", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Rankings", href: "/rankings" }, + { label: "Submit", href: "/submit" }, +]; + +const footerGroups = [ + { + title: "Search", + links: [ + { label: "All Tools", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Rankings", href: "/rankings" }, + ], + }, + { + title: "About", + links: [ + { label: "Submit a Tool", href: "/submit" }, + { label: "Privacy", href: "/privacy" }, + { label: "Terms", href: "/terms" }, + ], + }, +]; + +const popularSearches = [ + "write a blog post", + "generate video", + "code assistant", + "make a logo", + "edit photos", + "transcribe meetings", +]; + +async function SiteHome({ locale }: { locale: string }) { + const data = await getHomeDataSafe(6); + + return ( +
+ {/* 极简搜索首屏 */} +
+ + {siteConfig.brand.name} + +

+ AI tool search +

+ +
+
+ + +
+
+ +
+ {popularSearches.map((q) => ( + + {q} + + ))} +
+
+ + {/* 搜索之下:Trending */} + {data.trending.length > 0 && ( +
+

+ Trending now +

+ +
+ + See full rankings + +
+
+ )} +
+ ); +} + +export { SiteHome }; diff --git a/sites/findai/tailwind.config.ts b/sites/findai/tailwind.config.ts new file mode 100644 index 0000000..c4729ec --- /dev/null +++ b/sites/findai/tailwind.config.ts @@ -0,0 +1,11 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./src/**/*.{js,ts,jsx,tsx,mdx}", + "../../packages/core/src/**/*.{js,ts,jsx,tsx,mdx}", + ], + presets: [require("../../packages/core/tailwind.preset.cjs")], +}; + +export default config; diff --git a/sites/findai/tsconfig.json b/sites/findai/tsconfig.json new file mode 100644 index 0000000..95fd293 --- /dev/null +++ b/sites/findai/tsconfig.json @@ -0,0 +1,64 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./src/*", + "../../packages/core/src/*" + ], + "@aidir/core/pages/*": [ + "../../packages/core/src/pages/*" + ], + "@aidir/core/kit/*": [ + "../../packages/core/src/kit/*" + ], + "@aidir/core/src/*": [ + "../../packages/core/src/*" + ], + "@aidir/core/proxy": [ + "../../packages/core/src/proxy.ts" + ], + "@aidir/core/i18n.config": [ + "../../packages/core/src/i18n.config.ts" + ], + "@aidir/core/styles/globals.css": [ + "../../packages/core/src/styles/globals.css" + ], + "@aidir/core/*": [ + "../../packages/core/src/*", + "../../packages/core/*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/sites/launchai/.env.example b/sites/launchai/.env.example new file mode 100644 index 0000000..dad958b --- /dev/null +++ b/sites/launchai/.env.example @@ -0,0 +1,14 @@ +# LaunchAI 环境变量(与底座共享同一套 PostgreSQL / Better Auth / Admin) +DATABASE_URL="postgresql://postgres:postgres@127.0.0.1:15433/ai_directory" +BETTER_AUTH_SECRET="dev-secret-ai-directory-platform-0123456789abcdef" +BETTER_AUTH_URL="http://localhost:3002" +AUTH_GOOGLE_ID="" +AUTH_GOOGLE_SECRET="" +NEXT_PUBLIC_AUTH_GOOGLE_ENABLED="false" +AUTH_GITHUB_ID="" +AUTH_GITHUB_SECRET="" +NEXT_PUBLIC_AUTH_GITHUB_ENABLED="false" +RESEND_API_KEY="" +RESEND_FROM_EMAIL="LaunchAI " +NEXT_PUBLIC_APP_URL="http://localhost:3002" +NEXT_PUBLIC_APP_NAME="LaunchAI" diff --git a/sites/launchai/.gitignore b/sites/launchai/.gitignore new file mode 100644 index 0000000..309faff --- /dev/null +++ b/sites/launchai/.gitignore @@ -0,0 +1,5 @@ +/node_modules +/.next +/.env*.local +next-env.d.ts +*.tsbuildinfo diff --git a/sites/launchai/mdx-components.tsx b/sites/launchai/mdx-components.tsx new file mode 100644 index 0000000..2a15d84 --- /dev/null +++ b/sites/launchai/mdx-components.tsx @@ -0,0 +1 @@ +export { useMDXComponents } from "@aidir/core/src/mdx-components"; diff --git a/sites/launchai/messages/en.json b/sites/launchai/messages/en.json new file mode 100644 index 0000000..fc6dfd1 --- /dev/null +++ b/sites/launchai/messages/en.json @@ -0,0 +1,796 @@ +{ + "common": { + "brand": { + "name": "LaunchAI", + "tagline": "Discover and upvote today's AI products.", + "copyright": "Copyright © 2025", + "allRightsReserved": "All rights reserved" + }, + "actions": { + "signIn": "Sign in", + "signUp": "Sign Up", + "signOut": "Sign Out", + "getStarted": "Get Started", + "startFree": "Start Free", + "learnMore": "Learn More", + "viewAll": "View All", + "submit": "Submit", + "cancel": "Cancel", + "save": "Save", + "delete": "Delete", + "edit": "Edit", + "update": "Update", + "continue": "Continue", + "back": "Back", + "next": "Next", + "contactSales": "Contact Sales", + "startTrial": "Start Free Trial" + }, + "status": { + "loading": "Loading...", + "verified": "Verified", + "pending": "Pending", + "active": "Active", + "inactive": "Inactive" + } + }, + "navigation": { + "main": { + "tools": "Tools", + "blog": "Blog", + "contact": "Contact", + "dashboard": "Dashboard", + "profile": "Profile" + }, + "footer": { + "legal": { + "terms": "Terms of Service", + "privacy": "Privacy Policy", + "cookies": "Cookie Policy" + }, + "social": { + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "Discover the Best AI Tools", + "title": "LaunchAI — Discover and Upvote Today's AI Products", + "description": "A daily launch feed for AI products. Upvote the best AI tools, follow makers and climb the leaderboard.", + "cta": { + "primary": "Explore Tools", + "secondary": "Read Blog" + } + }, + "features": { + "title": "Everything You Need to Build Fast", + "subtitle": "Stop wasting time on boilerplate. Focus on your unique features while this template handles the foundation.", + "items": { + "aiOptimized": { + "title": "Modern Tech Stack", + "description": "Built with Next.js 14, TypeScript, Tailwind CSS, and PostgreSQL. Production-ready from day one." + }, + "zeroPipeline": { + "title": "Authentication Ready", + "description": "Email/password and Google OAuth configured. Session management and protected routes ready to use." + }, + "nonTechnical": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management. Monitor your users and manage permissions easily." + }, + "productionGrade": { + "title": "Blog System Included", + "description": "MDX-powered blog with i18n support. Create content in multiple languages with SEO optimization." + } + } + }, + "testimonials": { + "title": "Trusted by AI Enthusiasts", + "subtitle": "Join thousands of users discovering the best AI tools for their workflows.", + "items": [ + { + "name": "Sarah Chen", + "quote": "Toolso.AI helped me find the perfect AI writing assistant. The categorization makes discovery so easy!", + "designation": "Content Creator" + }, + { + "name": "Michael Park", + "quote": "Finally, a comprehensive AI tools directory that's well-organized. Saved me hours of research.", + "designation": "Product Manager" + }, + { + "name": "Emily Rodriguez", + "quote": "I discover new AI tools every week on Toolso.AI. It's become my go-to resource for AI exploration.", + "designation": "Startup Founder" + }, + { + "name": "David Kim", + "quote": "The search and filter features are incredibly helpful. Found exactly what I needed in minutes.", + "designation": "Software Engineer" + }, + { + "name": "Lisa Wang", + "quote": "Love the multilingual support! Makes it easy to explore AI tools in both English and Chinese.", + "designation": "Digital Marketer" + }, + { + "name": "James Liu", + "quote": "Great resource for staying up-to-date with the latest AI tools. The blog section is also very informative.", + "designation": "AI Researcher" + } + ] + }, + "companies": { + "title": "Built with Industry-Leading Technologies", + "subtitle": "Built on modern stack trusted by the world's best teams" + }, + "gridFeatures": { + "aiReady": { + "title": "Extensible Architecture", + "description": "Clean, modular code structure. Easy to add new features and integrations." + }, + "creem": { + "title": "Database Ready", + "description": "PostgreSQL with Drizzle ORM configured. Type-safe queries and migrations ready." + }, + "auth": { + "title": "Authentication System", + "description": "Better Auth with email/password and OAuth. Session management and protected routes ready." + }, + "deploy": { + "title": "One-Click Deploy", + "description": "Deploy to Vercel, Railway, or any platform instantly. Production-ready from day one." + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "Modern tech stack with Next.js 14, TypeScript, Tailwind CSS, and shadcn/ui components." + }, + "database": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management and system monitoring." + }, + "seo": { + "title": "SEO & Marketing", + "description": "Meta tags, Open Graph, sitemap, and analytics. Everything for organic growth." + }, + "vibeCoding": { + "title": "Blog System", + "description": "MDX-powered blog with multi-language support. Create content that ranks." + } + }, + "cta": { + "title": "Find Your Perfect AI Tool", + "description": "Browse our curated collection of AI tools and discover what works best for you.", + "button": "Explore Tools" + }, + "auth": { + "login": { + "title": "Sign in to your account", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "forgotPassword": "Forgot password?", + "noAccount": "Don't have an account?", + "signUpLink": "Sign Up", + "signInButton": "Sign in", + "signingIn": "Signing in...", + "errors": { + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "loginFailed": "Login failed. Please try again.", + "googleLoginFailed": "Google login failed. Please try again." + } + }, + "signup": { + "title": "Sign up for an account", + "nameLabel": "Full name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "hasAccount": "Already have an account?", + "signInLink": "Sign in", + "signUpButton": "Sign Up", + "signingUp": "Signing up...", + "errors": { + "nameRequired": "Please enter your name", + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "signupFailed": "Sign up failed. Please try again.", + "googleSignupFailed": "Google sign up failed. Please try again." + } + }, + "social": { + "googleSignIn": "Continue with Google", + "or": "Or continue with", + "githubSignIn": "Continue with GitHub" + }, + "checkEmail": { + "title": "Check Your Email", + "description": "We've sent a verification link to your email address. Please click the link to verify your account and get started.", + "notReceived": "Didn't receive the email?", + "checkSpam": "Check your spam or junk folder", + "checkEmailCorrect": "Make sure you entered the correct email", + "waitAndCheck": "Wait a few minutes and check again", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent successfully! Please check your inbox.", + "resendError": "Failed to resend verification email.", + "backToLogin": "Back to Login", + "securityNote": "For your security, the verification link will expire in 24 hours." + }, + "verifyEmail": { + "verifying": "Verifying Email", + "verifyingDescription": "Please wait while we verify your email address...", + "success": "Email Verified!", + "successDescription": "Your email has been successfully verified! Redirecting to login...", + "alreadyVerified": "Already Verified", + "failed": "Verification Failed", + "goToLogin": "Go to Login", + "backToSignUp": "Back to Sign Up", + "requestNew": "Request New Verification Email", + "checkSpamNote": "Check your spam folder if you don't see our emails" + }, + "emailVerifiedGuard": { + "title": "Email Verification Required", + "description": "Please verify your email address to access this page. Check your inbox for the verification link we sent to:", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent! Please check your inbox.", + "resendError": "Failed to send verification email. Please try again.", + "signOutLink": "Sign out and try a different account" + } + }, + "Admin": { + "sidebar": { + "title": "Admin Panel", + "subtitle": "System Management", + "dashboard": "Dashboard", + "tools": "Tools", + "categories": "Categories", + "tags": "Tags", + "users": "Users", + "backToDashboard": "Back to User Dashboard", + "submissions": "Submissions", + "claims": "Claims", + "reviews": "Reviews", + "discovery": "Discovery", + "votes": "Vote Audit", + "analytics": "Analytics" + }, + "header": { + "welcome": "Welcome", + "adminBadge": "Admin" + }, + "dashboard": { + "title": "Admin Dashboard", + "totalUsers": "Total Users", + "activeUsers": "Active Users", + "recentUsers": "Recent Users", + "viewAllUsers": "View All Users" + }, + "toolsManagement": { + "title": "Tools Management", + "totalCount": "{count} tools", + "searchPlaceholder": "Search tool name or slug...", + "allStatus": "All Status", + "published": "Published", + "draft": "Draft", + "addTool": "Add Tool", + "tool": "Tool", + "slug": "Slug", + "status": "Status", + "createdAt": "Created", + "actions": "Actions", + "noData": "No tools data", + "previous": "Previous", + "next": "Next", + "confirmDelete": "Are you sure you want to delete \"{name}\"? This action cannot be undone.", + "deleted": "Tool deleted", + "deleteFailed": "Delete failed", + "statusUpdated": "Status updated", + "statusUpdateFailed": "Status update failed", + "toDraft": "Set to draft", + "publish": "Publish", + "edit": "Edit", + "visitWebsite": "Visit website", + "delete": "Delete", + "modal": { + "editTitle": "Edit Tool", + "addTitle": "Add Tool", + "basicInfo": "Basic Information", + "linksAndImages": "Links & Images", + "categories": "Categories", + "tags": "Tags", + "slug": "Slug", + "status": "Status", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "domain": "Domain", + "websiteUrl": "Website URL", + "logoUrl": "Logo URL", + "coverImageUrl": "Cover Image URL", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTool": "Create Tool", + "requiredField": "Please fill in required fields", + "updated": "Tool updated", + "created": "Tool created", + "updateFailed": "Update failed", + "createFailed": "Create failed", + "statusDraft": "Draft", + "statusPublished": "Published", + "pricing": "Pricing", + "pricingNone": "Not set", + "pricingFree": "Free", + "pricingFreemium": "Freemium", + "pricingPaid": "Paid", + "featured": "Featured on homepage" + } + }, + "categoriesManagement": { + "title": "Categories Management", + "addCategory": "Add Category", + "order": "Order", + "category": "Category", + "slug": "Slug", + "toolCount": "Tools", + "toolCountLabel": "{count} tools", + "actions": "Actions", + "noData": "No categories data", + "edit": "Edit", + "delete": "Delete", + "cannotDelete": "This category has {count} tools, cannot delete", + "confirmDelete": "Are you sure you want to delete category \"{name}\"?", + "deleted": "Category deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Category", + "addTitle": "Add Category", + "slug": "Slug", + "icon": "Icon (emoji)", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "sortOrder": "Sort Order", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createCategory": "Create Category", + "requiredField": "Please fill in required fields", + "updated": "Category updated", + "created": "Category created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "tagsManagement": { + "title": "Tags Management", + "searchPlaceholder": "Search tags...", + "addTag": "Add Tag", + "toolCountLabel": "{count} tools", + "noData": "No tags data", + "edit": "Edit", + "delete": "Delete", + "confirmDeleteWithTools": "This tag is used by {count} tools. Deleting it will remove the tag from these tools. Continue?", + "confirmDelete": "Are you sure you want to delete tag \"{name}\"?", + "deleted": "Tag deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Tag", + "addTitle": "Add Tag", + "slug": "Slug", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTag": "Create Tag", + "requiredField": "Please fill in required fields", + "updated": "Tag updated", + "created": "Tag created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "users": { + "searchPlaceholder": "Search by name or email...", + "user": "User", + "role": "Role", + "status": "Status", + "joined": "Joined", + "actions": "Actions", + "admin": "Admin", + "banned": "Banned", + "active": "Active", + "unverified": "Unverified", + "verified": "Verified", + "emailVerified": "Email Verified", + "edit": "Edit", + "ban": "Ban", + "unban": "Unban", + "viewDetails": "View Details", + "banReason": "Ban Reason", + "banExpires": "Ban Expires", + "userDetails": "User Details", + "name": "Name", + "email": "Email", + "lastActive": "Last Active", + "close": "Close", + "roleUpdated": "Role updated successfully", + "roleUpdateFailed": "Failed to update role", + "userBanned": "User has been banned", + "userUnbanned": "User has been unbanned", + "banFailed": "Failed to ban/unban user", + "cancel": "Cancel", + "pagination": { + "previous": "Previous", + "next": "Next", + "page": "Page {current} of {total}" + } + } + }, + "dashboard": { + "title": "Dashboard", + "welcome": "Welcome back", + "cards": { + "personalInfo": { + "title": "Personal Info", + "labels": { + "name": "Name", + "email": "Email", + "status": "Status", + "notSet": "Not set" + } + }, + "quickActions": { + "title": "Quick Actions", + "editProfile": "Edit Profile", + "accountSettings": "Account Settings", + "securitySettings": "Security Settings" + } + }, + "favorites": { + "title": "My Favorites", + "empty": "No favorite tools yet.", + "browseTools": "Browse tools and save your favorites" + } + }, + "profile": { + "title": "Profile", + "subtitle": "Manage your account settings and preferences", + "sections": { + "basicInfo": { + "title": "Basic Information", + "fullName": "Full Name", + "email": "Email Address", + "verificationStatus": "Verification Status", + "notSet": "Not set", + "nameNotSet": "Name not set", + "accountId": "Account ID" + }, + "accountSettings": { + "title": "Account Settings", + "memberSince": "Member Since", + "lastLogin": "Last Login", + "accountType": "Account Type" + } + }, + "form": { + "nameLabel": "Name", + "namePlaceholder": "Enter your name", + "emailLabel": "Email", + "emailPlaceholder": "Enter your email", + "updateButton": "Update Profile", + "updating": "Updating...", + "updateSuccess": "Profile updated successfully!", + "updateError": "Failed to update profile. Please try again." + } + }, + "contact": { + "title": "Contact Us", + "subtitle": "We'd love to hear from you. Send us a message and we'll respond as soon as possible.", + "description": "Please reach out to us and we will get back to you shortly.", + "testimonial": { + "title": "We're here to help", + "description": "Our team is ready to assist you with any questions or feedback." + }, + "form": { + "nameLabel": "Full Name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "companyLabel": "Company", + "companyPlaceholder": "Your Company", + "messageLabel": "Message", + "messagePlaceholder": "Enter your message here", + "submitButton": "Submit", + "submitting": "Sending...", + "submitSuccess": "Message sent successfully!", + "submitError": "Failed to send message. Please try again." + } + }, + "blog": { + "title": "Blog", + "subtitle": "Latest insights and updates from our team", + "readMore": "Read More", + "minRead": "min read" + }, + "errors": { + "404": { + "title": "404 - Page Not Found", + "message": "The page you are looking for doesn't exist.", + "backHome": "Go to Homepage" + }, + "500": { + "title": "Something Went Wrong", + "message": "We're experiencing technical difficulties. Please try again later.", + "backHome": "Back to Home" + }, + "general": { + "title": "An Error Occurred", + "message": "Something unexpected happened. Please try again.", + "tryAgain": "Try Again" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "John Doe", + "designation": "Software Engineer" + }, + { + "name": "Jane Smith", + "designation": "Product Manager" + }, + { + "name": "Bob Johnson", + "designation": "Designer" + }, + { + "name": "Alice Brown", + "designation": "Developer" + } + ] + }, + "footer": { + "tagline": "Discover the best AI tools to boost your productivity.", + "product": { + "title": "Product", + "features": "Features", + "documentation": "Documentation" + }, + "company": { + "title": "Company", + "about": "About", + "blog": "Blog", + "careers": "Careers" + }, + "legal": { + "title": "Legal", + "privacy": "Privacy", + "terms": "Terms", + "cookies": "Cookies" + }, + "social": { + "title": "Social", + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + }, + "newsletter": { + "title": "Subscribe to Newsletter", + "description": "Get the latest updates and news directly in your inbox.", + "placeholder": "Enter your email", + "subscribe": "Subscribe", + "success": "Subscribed! Thanks for joining.", + "invalidEmail": "Please enter a valid email address.", + "error": "Subscription failed. Please try again." + } + }, + "tools": { + "title": "AI Tools Directory", + "subtitle": "Discover the best AI tools to boost your productivity", + "searchPlaceholder": "Search tools...", + "all": "All", + "foundTools": "Found {count} tools", + "visitWebsite": "Visit website", + "noTools": "No tools found", + "backToTools": "Back to tools", + "about": "About", + "categories": "Categories", + "tags": "Tags", + "visitButton": "Visit Website", + "toolInfo": "Tool Info", + "domain": "Domain", + "added": "Added", + "notFound": "Tool Not Found", + "favorites": { + "add": "Save to Favorites", + "remove": "Remove from Favorites", + "loginRequired": "Please sign in to save favorites", + "error": "Action failed. Please try again." + }, + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid" + }, + "categoryPage": { + "viewAll": "View all {count} tools" + }, + "reviewCta": "Ratings and reviews come from verified community members. Voted Helpful counts are shown next to each review.", + "alternatives": "Alternatives", + "seeAllAlternatives": "See all alternatives", + "stats": { + "votes": "Upvotes", + "views": "Views" + }, + "share": { + "share": "Share", + "copy": "Copy", + "copyLink": "Copy link", + "copied": "Link copied to clipboard" + }, + "sort": { + "latest": "Latest", + "trending": "Trending" + } + }, + "seo": { + "home": { + "title": "LaunchAI — Discover and Upvote Today's AI Products", + "description": "A daily launch feed for AI products. Upvote the best AI tools, follow makers and climb the leaderboard.", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "Blog - Toolso.AI", + "description": "Latest insights, tutorials and updates about AI tools. Stay informed about the best AI tools and industry trends.", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "Contact Us - Toolso.AI", + "description": "Get in touch with us. We'd love to hear your feedback and tool suggestions.", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "Login - Toolso.AI", + "description": "Sign in to your account to submit tools, save favorites, and contribute to our AI tools directory.", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "Sign Up - Toolso.AI", + "description": "Create your account and start contributing to our AI tools directory. Submit tools and join our community.", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "Terms of Service - Toolso.AI", + "description": "Read our terms of service to understand the rules and guidelines for using Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "Privacy Policy - Toolso.AI", + "description": "Learn how we collect, use, and protect your personal information and data on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie Policy - Toolso.AI", + "description": "Understand how we use cookies and similar tracking technologies on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI Tools Directory - Discover the Best AI Tools", + "description": "Explore our curated collection of AI tools. Find the best AI tools for productivity, creativity, and more." + } + }, + "featuredTools": { + "title": "Featured Tools", + "subtitle": "Curated collection of AI tools to boost your productivity", + "visitWebsite": "Visit website", + "empty": "No tools yet. Add some in the admin panel.", + "viewAll": "View All Tools" + }, + "voting": { + "vote": "Upvote", + "voted": "Upvoted", + "unvote": "Remove vote", + "loginRequired": "Please sign in to vote — you'll be brought right back.", + "rateLimited": "Slow down a bit — too many votes in a short time.", + "error": "Vote failed. Please try again." + }, + "reviews": { + "title": "Reviews", + "writeReview": "Write a review", + "empty": "No reviews yet — be the first to share your experience.", + "loadMore": "Load more", + "loading": "Loading...", + "helpful": "Helpful", + "verifiedUser": "Verified user", + "pros": "Pros", + "cons": "Cons", + "yourRating": "Your rating", + "ratingRequired": "Please pick a star rating first.", + "titlePlaceholder": "Sum it up in one line (optional)", + "contentPlaceholder": "What did you use it for? How well does it work?", + "prosPlaceholder": "What do you like about it?", + "consPlaceholder": "What could be better?", + "useCasePlaceholder": "Your use case (e.g. social media content)", + "saving": "Saving...", + "submit": "Publish review", + "update": "Update review", + "cancel": "Cancel", + "delete": "Delete my review", + "deleted": "Review deleted", + "tooShort": "Review is a bit short — tell us at least a sentence.", + "error": "Could not save your review. Please try again.", + "basedOn": "Based on {count} reviews" + }, + "submission": { + "name": "Tool name", + "websiteUrl": "Website URL", + "tagline": "Tagline", + "taglinePlaceholder": "One-line pitch shown on cards", + "description": "Description", + "descriptionPlaceholder": "What does it do? Who is it for? What makes it different?", + "logoUrl": "Logo URL", + "category": "Category", + "pricingLabel": "Pricing model", + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid", + "freeTrial": "Free Trial", + "openSource": "Open Source", + "contact": "Contact for pricing" + }, + "founderName": "Founder / company", + "contactEmail": "Contact email", + "socialLinks": "Social links", + "note": "Notes for the editors", + "notePlaceholder": "Anything that helps us review faster (launch date, metrics...)", + "selectPlaceholder": "Select...", + "submit": "Submit for review", + "submitting": "Submitting...", + "submitted": "Submitted! We'll review it within 48 hours.", + "reviewNote": "Free listing · reviewed within 48h", + "duplicateFound": "Looks like this tool may already be listed:", + "duplicateBlocked": "This tool appears to be already listed. Duplicate submissions are not allowed.", + "error": "Submission failed. Please check your inputs." + }, + "claim": { + "claimThisTool": "Claim this tool", + "verifiedOwner": "Verified owner", + "formTitle": "Claim ownership of this listing", + "rolePlaceholder": "Your role (e.g. Founder, Marketing lead)", + "messagePlaceholder": "How should we verify you? (same-domain email, press page...)", + "proofPlaceholder": "Proof URL (optional)", + "submit": "Send claim", + "submitting": "Sending...", + "submitted": "Claim sent! We'll review it shortly.", + "pendingExists": "You already have a pending claim for this tool.", + "cancel": "Cancel", + "error": "Could not send your claim." + }, + "rankings": { + "title": "Community Rankings", + "subtitle": "Seven live leaderboards powered by votes, reviews, saves and engagement — not sponsored placement.", + "trending": "Trending", + "popular": "Popular", + "mostVoted": "Most Voted", + "mostSaved": "Most Saved", + "highestRated": "Highest Rated", + "new": "New", + "editorsChoice": "Editor's Choice", + "empty": "No tools on this board yet." + } +} diff --git a/sites/launchai/messages/zh.json b/sites/launchai/messages/zh.json new file mode 100644 index 0000000..d834bee --- /dev/null +++ b/sites/launchai/messages/zh.json @@ -0,0 +1,804 @@ +{ + "common": { + "brand": { + "name": "LaunchAI", + "tagline": "Discover and upvote today's AI products.", + "copyright": "版权所有 © 2025", + "allRightsReserved": "保留所有权利" + }, + "actions": { + "signIn": "登录", + "signUp": "注册", + "signOut": "退出登录", + "getStarted": "开始使用", + "startFree": "免费开始", + "startTrial": "开始试用", + "contactSales": "联系销售", + "learnMore": "了解更多", + "viewAll": "查看全部", + "submit": "提交", + "cancel": "取消", + "save": "保存", + "delete": "删除", + "edit": "编辑", + "update": "更新", + "continue": "继续", + "back": "返回", + "next": "下一步" + }, + "status": { + "loading": "加载中...", + "verified": "已验证", + "pending": "待处理", + "active": "已激活", + "inactive": "未激活" + } + }, + "navigation": { + "main": { + "tools": "工具库", + "blog": "博客", + "contact": "联系我们", + "dashboard": "仪表盘", + "profile": "个人资料" + }, + "footer": { + "legal": { + "terms": "服务条款", + "privacy": "隐私政策", + "cookies": "Cookie 政策" + }, + "social": { + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "发现最好的 AI 工具", + "title": "LaunchAI — 发现并投票今日 AI 新品", + "description": "AI 产品每日发布社区:为最好的 AI 工具投票,登上社区排行榜。", + "cta": { + "primary": "探索工具", + "secondary": "阅读博客" + } + }, + "features": { + "title": "开始构建所需的一切", + "subtitle": "告别重复的样板代码。专注于你的独特功能,基础设施已为你准备就绪。", + "items": { + "aiOptimized": { + "title": "现代技术栈", + "description": "基于 Next.js 14、TypeScript、Tailwind CSS 和 PostgreSQL 构建。采用行业最佳实践和企业级架构。" + }, + "zeroPipeline": { + "title": "开箱即用的认证", + "description": "Better Auth 驱动的完整认证系统,支持邮箱密码和 OAuth 登录、邮箱验证、密码重置和会话管理。" + }, + "nonTechnical": { + "title": "管理后台", + "description": "功能齐全的管理面板,包含用户管理、角色权限控制和业务数据监控。轻松扩展满足你的需求。" + }, + "productionGrade": { + "title": "博客系统", + "description": "内置 MDX 博客系统,支持语法高亮、SEO 优化和国际化。非常适合内容营销和产品更新。" + } + } + }, + "testimonials": { + "title": "用户评价", + "subtitle": "来自使用 Toolso.AI 发现优质 AI 工具的真实用户反馈。", + "items": [ + { + "name": "张伟", + "quote": "Toolso.AI 帮我找到了完美的 AI 写作助手,分类清晰让发现变得非常简单!", + "designation": "内容创作者" + }, + { + "name": "王强", + "quote": "终于有了一个组织良好的 AI 工具目录,节省了我大量的研究时间。", + "designation": "产品经理" + }, + { + "name": "李娜", + "quote": "每周都能在 Toolso.AI 上发现新的 AI 工具,已经成为我探索 AI 的首选资源。", + "designation": "创业者" + }, + { + "name": "陈婷", + "quote": "搜索和筛选功能非常好用,几分钟就找到了我需要的工具。", + "designation": "软件工程师" + }, + { + "name": "赵明", + "quote": "喜欢中英文双语支持!可以轻松探索各种 AI 工具。", + "designation": "数字营销专家" + }, + { + "name": "朱悦", + "quote": "了解最新 AI 工具的好资源,博客板块也很有价值。", + "designation": "AI 研究员" + } + ] + }, + "companies": { + "title": "采用行业领先技术构建", + "subtitle": "基于现代技术栈,被全球顶尖团队信赖" + }, + "gridFeatures": { + "aiReady": { + "title": "可扩展架构", + "description": "模块化设计,轻松添加新功能。遵循 Next.js 最佳实践,便于维护。" + }, + "creem": { + "title": "邮件系统", + "description": "集成 Resend 邮件服务,支持交易邮件、验证邮件和新闻通讯。" + }, + "auth": { + "title": "身份认证", + "description": "Better Auth 提供邮箱密码和 OAuth 支持。会话管理和路由保护已就绪。" + }, + "deploy": { + "title": "一键部署", + "description": "即刻部署到 Vercel、Railway 或任何平台。从第一天起即可投入生产。" + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "现代技术栈包括 Next.js 14、TypeScript、Tailwind CSS 和 shadcn/ui 组件。" + }, + "database": { + "title": "数据库 + ORM", + "description": "PostgreSQL 配合 Drizzle ORM。类型安全的查询和迁移已配置。" + }, + "seo": { + "title": "SEO 和营销", + "description": "元标签、Open Graph、站点地图和分析。为有机增长准备的一切。" + }, + "vibeCoding": { + "title": "国际化支持", + "description": "内置中英文支持,使用 next-intl 实现。轻松添加更多语言。" + } + }, + "cta": { + "title": "找到最适合你的 AI 工具", + "description": "浏览精选 AI 工具集合,发现能帮助你提升效率的最佳工具。", + "button": "探索工具" + }, + "auth": { + "login": { + "title": "登录您的账户", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "forgotPassword": "忘记密码?", + "noAccount": "还没有账户?", + "signUpLink": "注册", + "signInButton": "登录", + "signingIn": "登录中...", + "errors": { + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "loginFailed": "登录失败,请重试。", + "googleLoginFailed": "Google 登录失败,请重试。" + } + }, + "signup": { + "title": "注册一个新账户", + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "hasAccount": "已经有账户了?", + "signInLink": "登录", + "signUpButton": "注册", + "signingUp": "注册中...", + "errors": { + "nameRequired": "请输入您的姓名", + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "signupFailed": "注册失败,请重试。", + "googleSignupFailed": "Google 注册失败,请重试。" + } + }, + "social": { + "googleSignIn": "使用 Google 继续", + "or": "或者继续使用", + "githubSignIn": "使用 GitHub 登录" + }, + "checkEmail": { + "title": "请查收您的邮件", + "description": "我们已向您的邮箱发送了验证链接。请点击链接验证您的账户并开始使用。", + "notReceived": "没有收到邮件?", + "checkSpam": "检查垃圾邮件文件夹", + "checkEmailCorrect": "确认输入的邮箱地址是否正确", + "waitAndCheck": "等待几分钟后再次查看", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件发送成功!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "backToLogin": "返回登录", + "securityNote": "为了您的安全,验证链接将在24小时后失效。" + }, + "verifyEmail": { + "verifying": "正在验证邮箱", + "verifyingDescription": "请稍候,我们正在验证您的邮箱地址...", + "success": "邮箱验证成功!", + "successDescription": "您的邮箱已成功验证!正在跳转到登录页面...", + "alreadyVerified": "已验证", + "failed": "验证失败", + "goToLogin": "前往登录", + "backToSignUp": "返回注册", + "requestNew": "重新发送验证邮件", + "checkSpamNote": "如果没有收到邮件,请检查垃圾邮件文件夹" + }, + "emailVerifiedGuard": { + "title": "需要验证邮箱", + "description": "请验证您的邮箱地址以访问此页面。请查收我们发送到以下邮箱的验证链接:", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件已发送!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "signOutLink": "退出并使用其他账户" + } + }, + "Admin": { + "sidebar": { + "title": "管理后台", + "subtitle": "系统管理", + "dashboard": "仪表板", + "tools": "工具管理", + "categories": "分类管理", + "tags": "标签管理", + "users": "用户管理", + "backToDashboard": "返回用户面板", + "submissions": "提交审核", + "claims": "认领审核", + "reviews": "评论审核", + "discovery": "发现管理", + "votes": "投票审计", + "analytics": "数据分析" + }, + "header": { + "welcome": "欢迎", + "adminBadge": "管理员" + }, + "dashboard": { + "title": "管理员仪表板", + "totalUsers": "总用户数", + "activeUsers": "活跃用户", + "recentUsers": "最近注册用户", + "viewAllUsers": "查看所有用户" + }, + "toolsManagement": { + "title": "工具管理", + "totalCount": "共 {count} 个工具", + "searchPlaceholder": "搜索工具名称或 slug...", + "allStatus": "全部状态", + "published": "已发布", + "draft": "草稿", + "addTool": "添加工具", + "tool": "工具", + "slug": "Slug", + "status": "状态", + "createdAt": "创建时间", + "actions": "操作", + "noData": "暂无工具数据", + "previous": "上一页", + "next": "下一页", + "confirmDelete": "确定要删除工具 \"{name}\" 吗?此操作不可恢复。", + "deleted": "工具已删除", + "deleteFailed": "删除失败", + "statusUpdated": "状态已更新", + "statusUpdateFailed": "状态更新失败", + "toDraft": "转为草稿", + "publish": "发布", + "edit": "编辑", + "visitWebsite": "访问网站", + "delete": "删除", + "modal": { + "editTitle": "编辑工具", + "addTitle": "添加工具", + "basicInfo": "基本信息", + "linksAndImages": "链接和图片", + "categories": "分类", + "tags": "标签", + "slug": "Slug", + "status": "状态", + "nameEn": "英文名称", + "nameZh": "中文名称", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "domain": "域名", + "websiteUrl": "网站链接", + "logoUrl": "Logo URL", + "coverImageUrl": "封面图 URL", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTool": "创建工具", + "requiredField": "请填写必填字段", + "updated": "工具已更新", + "created": "工具已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败", + "statusDraft": "草稿", + "statusPublished": "已发布", + "pricing": "定价", + "pricingNone": "未设置", + "pricingFree": "免费", + "pricingFreemium": "免费增值", + "pricingPaid": "付费", + "featured": "首页精选" + } + }, + "categoriesManagement": { + "title": "分类管理", + "addCategory": "添加分类", + "order": "排序", + "category": "分类", + "slug": "Slug", + "toolCount": "工具数", + "toolCountLabel": "{count} 个工具", + "actions": "操作", + "noData": "暂无分类数据", + "edit": "编辑", + "delete": "删除", + "cannotDelete": "该分类下有 {count} 个工具,无法删除", + "confirmDelete": "确定要删除分类 \"{name}\" 吗?", + "deleted": "分类已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑分类", + "addTitle": "添加分类", + "slug": "Slug", + "icon": "图标 (emoji)", + "nameEn": "英文名称", + "nameZh": "中文名称", + "sortOrder": "排序", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createCategory": "创建分类", + "requiredField": "请填写必填字段", + "updated": "分类已更新", + "created": "分类已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "tagsManagement": { + "title": "标签管理", + "searchPlaceholder": "搜索标签...", + "addTag": "添加标签", + "toolCountLabel": "{count} 个工具", + "noData": "暂无标签数据", + "edit": "编辑", + "delete": "删除", + "confirmDeleteWithTools": "该标签被 {count} 个工具使用,删除后这些工具将失去该标签。确定要删除吗?", + "confirmDelete": "确定要删除标签 \"{name}\" 吗?", + "deleted": "标签已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑标签", + "addTitle": "添加标签", + "slug": "Slug", + "nameEn": "英文名称", + "nameZh": "中文名称", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTag": "创建标签", + "requiredField": "请填写必填字段", + "updated": "标签已更新", + "created": "标签已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "users": { + "searchPlaceholder": "搜索用户姓名或邮箱...", + "user": "用户", + "role": "角色", + "status": "状态", + "joined": "加入时间", + "actions": "操作", + "admin": "管理员", + "banned": "已禁用", + "active": "活跃", + "unverified": "未验证", + "edit": "编辑", + "ban": "禁用", + "unban": "解禁", + "viewDetails": "查看详情", + "banReason": "禁用原因", + "banExpires": "禁用到期", + "userDetails": "用户详情", + "name": "姓名", + "email": "邮箱", + "emailVerified": "邮箱验证", + "verified": "已验证", + "lastActive": "最后活跃", + "close": "关闭", + "roleUpdated": "角色已更新", + "roleUpdateFailed": "角色更新失败", + "userBanned": "用户已禁用", + "userUnbanned": "用户已解禁", + "banFailed": "禁用操作失败", + "pagination": { + "previous": "上一页", + "next": "下一页", + "page": "第 {current} / {total} 页" + }, + "cancel": "取消" + } + }, + "dashboard": { + "title": "仪表盘", + "welcome": "欢迎回来", + "cards": { + "personalInfo": { + "title": "个人信息", + "labels": { + "name": "姓名", + "email": "邮箱", + "status": "状态", + "notSet": "未设置" + } + }, + "quickActions": { + "title": "快捷操作", + "editProfile": "编辑个人资料", + "accountSettings": "账户设置", + "securitySettings": "安全设置" + } + }, + "favorites": { + "title": "我的收藏", + "empty": "还没有收藏的工具。", + "browseTools": "去浏览工具并收藏" + } + }, + "profile": { + "title": "个人资料", + "subtitle": "管理您的账户设置和偏好", + "sections": { + "basicInfo": { + "title": "基本信息", + "fullName": "姓名", + "email": "邮箱地址", + "verificationStatus": "验证状态", + "notSet": "未设置", + "nameNotSet": "姓名未设置", + "accountId": "账户 ID" + }, + "accountSettings": { + "title": "账户详情", + "memberSince": "注册于", + "lastLogin": "最近登录", + "accountType": "账户类型" + } + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "请输入您的姓名", + "emailLabel": "邮箱", + "emailPlaceholder": "请输入您的邮箱地址", + "updateButton": "更新资料", + "updating": "更新中...", + "updateSuccess": "个人资料更新成功", + "updateError": "个人资料更新失败" + } + }, + "contact": { + "title": "联系我们", + "subtitle": "我们很乐意倾听您的声音。给我们发送消息,我们会尽快回复。", + "description": "请联系我们,我们会尽快回复。", + "testimonial": { + "title": "帮助用户发现最佳 AI 工具", + "description": "Toolso.AI 致力于为用户提供精选的 AI 工具目录,帮助大家找到最适合的 AI 助手。" + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "companyLabel": "公司", + "companyPlaceholder": "某某科技有限公司", + "messageLabel": "消息", + "messagePlaceholder": "请在此处输入您的消息", + "submitButton": "提交", + "submitting": "发送中...", + "submitSuccess": "消息发送成功!", + "submitError": "消息发送失败,请重试。" + } + }, + "blog": { + "title": "博客", + "subtitle": "来自我们团队的最新见解与更新", + "readMore": "阅读更多", + "minRead": "分钟阅读" + }, + "errors": { + "404": { + "title": "404 - 页面未找到", + "message": "您正在寻找的页面不存在。", + "backHome": "返回首页" + }, + "500": { + "title": "出错了", + "message": "我们遇到了一些技术问题,请稍后重试。", + "backHome": "返回首页" + }, + "general": { + "title": "发生错误", + "message": "发生了一些意外情况,请重试。", + "tryAgain": "重试" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "张伟", + "designation": "软件工程师" + }, + { + "name": "王强", + "designation": "产品经理" + }, + { + "name": "李娜", + "designation": "数据科学家" + }, + { + "name": "陈婷", + "designation": "UX设计师" + }, + { + "name": "赵明", + "designation": "全栈开发者" + }, + { + "name": "朱悦", + "designation": "独立开发者" + } + ] + }, + "footer": { + "tagline": "发现最好的 AI 工具,提升你的工作效率。", + "product": { + "title": "产品", + "features": "功能", + "documentation": "文档" + }, + "company": { + "title": "公司", + "about": "关于我们", + "blog": "博客", + "careers": "招聘" + }, + "legal": { + "title": "法律", + "privacy": "隐私政策", + "terms": "服务条款", + "cookies": "Cookie 政策" + }, + "social": { + "title": "社交", + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + }, + "newsletter": { + "title": "订阅邮件", + "description": "获取最新动态和资讯,直接发送到您的邮箱。", + "placeholder": "输入您的邮箱", + "subscribe": "订阅", + "success": "订阅成功!感谢加入。", + "invalidEmail": "请输入有效的邮箱地址。", + "error": "订阅失败,请重试。" + } + }, + "tools": { + "title": "AI 工具库", + "subtitle": "发现最好的 AI 工具,提升您的工作效率", + "searchPlaceholder": "搜索工具...", + "all": "全部", + "foundTools": "共找到 {count} 个工具", + "visitWebsite": "访问网站", + "noTools": "暂无工具", + "backToTools": "返回工具列表", + "about": "介绍", + "categories": "分类", + "tags": "标签", + "visitButton": "访问网站", + "toolInfo": "工具信息", + "domain": "域名", + "added": "添加时间", + "notFound": "工具未找到", + "favorites": { + "add": "收藏", + "remove": "取消收藏", + "loginRequired": "请先登录后再收藏", + "error": "操作失败,请重试。" + }, + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费" + }, + "categoryPage": { + "viewAll": "查看该分类全部 {count} 个工具" + }, + "reviewCta": "评分与评论来自已验证的社区用户,每条评论旁展示“有用”计数。", + "alternatives": "替代品", + "seeAllAlternatives": "查看全部替代品", + "stats": { + "votes": "票数", + "views": "浏览量" + }, + "share": { + "share": "分享", + "copy": "复制", + "copyLink": "复制链接", + "copied": "链接已复制" + }, + "sort": { + "latest": "最新", + "trending": "最热" + } + }, + "seo": { + "home": { + "title": "LaunchAI — 发现并投票今日 AI 新品", + "description": "AI 产品每日发布社区:为最好的 AI 工具投票,登上社区排行榜。", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "博客 - Toolso.AI", + "description": "关于 AI 工具的最新资讯、教程和更新。了解最佳 AI 工具和行业趋势。", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "联系我们 - Toolso.AI", + "description": "与我们取得联系。我们期待听到您的反馈和工具推荐建议。", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "登录 - Toolso.AI", + "description": "登录您的账户,提交工具、收藏喜爱的工具,为 AI 工具目录做贡献。", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "注册 - Toolso.AI", + "description": "创建您的账户,开始为 AI 工具目录做贡献。提交工具、加入我们的社区。", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "服务条款 - Toolso.AI", + "description": "阅读我们的服务条款,了解使用 Toolso.AI 的规则和指南。", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "隐私政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上收集、使用和保护您的个人信息和数据。", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie 政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上使用 cookies 和类似的跟踪技术。", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI 工具库 - 发现最好的 AI 工具", + "description": "浏览精选的 AI 工具集合。找到提升效率、激发创意的最佳 AI 工具。" + } + }, + "featuredTools": { + "title": "精选工具", + "subtitle": "精选优质 AI 工具,助力提升工作效率", + "visitWebsite": "访问网站", + "empty": "暂无工具,请先在后台添加", + "viewAll": "查看全部工具" + }, + "voting": { + "vote": "投票", + "voted": "已投", + "unvote": "取消投票", + "loginRequired": "投票需要先登录,登录后会自动回到本页。", + "rateLimited": "操作太快了,请稍后再试。", + "error": "投票失败,请重试。" + }, + "reviews": { + "title": "用户评论", + "writeReview": "写评论", + "empty": "还没有评论——来分享你的使用体验吧。", + "loadMore": "加载更多", + "loading": "加载中...", + "helpful": "有用", + "verifiedUser": "已验证用户", + "pros": "优点", + "cons": "缺点", + "yourRating": "你的评分", + "ratingRequired": "请先选择星级评分。", + "titlePlaceholder": "一句话总结(可选)", + "contentPlaceholder": "你用它做什么?效果如何?", + "prosPlaceholder": "它哪里做得好?", + "consPlaceholder": "哪里还可以改进?", + "useCasePlaceholder": "你的使用场景(如 社媒内容创作)", + "saving": "保存中...", + "submit": "发布评论", + "update": "更新评论", + "cancel": "取消", + "delete": "删除我的评论", + "deleted": "评论已删除", + "tooShort": "评论有点短——至少写一句话吧。", + "error": "评论保存失败,请重试。", + "basedOn": "共 {count} 条评论" + }, + "submission": { + "name": "工具名称", + "websiteUrl": "官网地址", + "tagline": "一句话简介", + "taglinePlaceholder": "展示在卡片上的一句话卖点", + "description": "详细介绍", + "descriptionPlaceholder": "它是做什么的?适合谁?有什么不同?", + "logoUrl": "Logo 地址", + "category": "分类", + "pricingLabel": "定价模式", + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费", + "freeTrial": "免费试用", + "openSource": "开源", + "contact": "联系定价" + }, + "founderName": "创始人 / 公司", + "contactEmail": "联系邮箱", + "socialLinks": "社交链接", + "note": "给编辑的备注", + "notePlaceholder": "任何能加快审核的信息(上线时间、数据等)", + "selectPlaceholder": "请选择...", + "submit": "提交审核", + "submitting": "提交中...", + "submitted": "已提交!我们会在 48 小时内完成审核。", + "reviewNote": "免费收录 · 48 小时内审核", + "duplicateFound": "这个工具可能已经被收录:", + "duplicateBlocked": "该工具似乎已被收录,不允许重复提交。", + "error": "提交失败,请检查填写内容。" + }, + "claim": { + "claimThisTool": "认领此工具", + "verifiedOwner": "已认证所有者", + "formTitle": "认领该收录页的所有权", + "rolePlaceholder": "你的身份(如 创始人、市场负责人)", + "messagePlaceholder": "我们如何验证你的身份?(同域名邮箱、官方报道页等)", + "proofPlaceholder": "证明链接(可选)", + "submit": "发送认领申请", + "submitting": "发送中...", + "submitted": "认领申请已发送,我们会尽快审核。", + "pendingExists": "你已有一条待审核的认领申请。", + "cancel": "取消", + "error": "认领申请发送失败。" + }, + "rankings": { + "title": "社区榜单", + "subtitle": "七个实时榜单由投票、评论、收藏与互动数据驱动——不接受赞助排名。", + "trending": "趋势榜", + "popular": "热门榜", + "mostVoted": "最多投票", + "mostSaved": "最多收藏", + "highestRated": "最高评分", + "new": "最新收录", + "editorsChoice": "编辑精选", + "empty": "该榜单暂无工具。" + } +} diff --git a/sites/launchai/next.config.mjs b/sites/launchai/next.config.mjs new file mode 100644 index 0000000..84f2b3e --- /dev/null +++ b/sites/launchai/next.config.mjs @@ -0,0 +1,5 @@ +import createSiteConfig from "@aidir/core/next-config"; + +export default createSiteConfig({ + requestPath: "./src/i18n/request.ts", +}); diff --git a/sites/launchai/package.json b/sites/launchai/package.json new file mode 100644 index 0000000..7c5b966 --- /dev/null +++ b/sites/launchai/package.json @@ -0,0 +1,34 @@ +{ + "name": "site-launchai", + "version": "1.0.0", + "description": "LaunchAI — AI directory site powered by @aidir/core", + "private": true, + "scripts": { + "dev": "next dev -p 3002", + "build": "next build", + "start": "next start -p 3002", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@aidir/core": "workspace:*", + "next": "16.1.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "sonner": "^2.0.7", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "framer-motion": "^12.43.0" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@types/mdx": "^2.0.13", + "typescript": "^5", + "tailwindcss": "^3.4.1", + "postcss": "^8" + } +} diff --git a/sites/launchai/postcss.config.mjs b/sites/launchai/postcss.config.mjs new file mode 100644 index 0000000..a06f589 --- /dev/null +++ b/sites/launchai/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/sites/launchai/public/avatar.jpeg b/sites/launchai/public/avatar.jpeg new file mode 100644 index 0000000..5f84d25 Binary files /dev/null and b/sites/launchai/public/avatar.jpeg differ diff --git a/sites/launchai/public/banner.png b/sites/launchai/public/banner.png new file mode 100644 index 0000000..1913b5c Binary files /dev/null and b/sites/launchai/public/banner.png differ diff --git a/sites/launchai/public/icon-192.png b/sites/launchai/public/icon-192.png new file mode 100644 index 0000000..7c35646 Binary files /dev/null and b/sites/launchai/public/icon-192.png differ diff --git a/sites/launchai/public/icon-512.png b/sites/launchai/public/icon-512.png new file mode 100644 index 0000000..9dcae12 Binary files /dev/null and b/sites/launchai/public/icon-512.png differ diff --git a/sites/launchai/public/icon.svg b/sites/launchai/public/icon.svg new file mode 100644 index 0000000..ffbca57 --- /dev/null +++ b/sites/launchai/public/icon.svg @@ -0,0 +1 @@ +L diff --git a/sites/launchai/public/noise.webp b/sites/launchai/public/noise.webp new file mode 100644 index 0000000..8349904 Binary files /dev/null and b/sites/launchai/public/noise.webp differ diff --git a/sites/launchai/public/og-image.png b/sites/launchai/public/og-image.png new file mode 100644 index 0000000..6962af5 Binary files /dev/null and b/sites/launchai/public/og-image.png differ diff --git a/sites/launchai/public/robots.txt b/sites/launchai/public/robots.txt new file mode 100644 index 0000000..9f21055 --- /dev/null +++ b/sites/launchai/public/robots.txt @@ -0,0 +1,24 @@ +# robots.txt for Toolso.AI - AI Tools Directory +# https://toolso.ai + +User-agent: * +Allow: / + +# Disallow admin and API pages +Disallow: /admin/ +Disallow: /api/ + +# Disallow authentication pages +Disallow: /*/signup +Disallow: /*/login +Disallow: /*/check-email +Disallow: /*/verify-email +Disallow: /*/forgot-password +Disallow: /*/reset-password + +# Disallow protected user pages +Disallow: /*/dashboard +Disallow: /*/profile + +# Sitemap location +Sitemap: https://toolso.ai/sitemap.xml diff --git a/sites/launchai/public/skeleton-one.png b/sites/launchai/public/skeleton-one.png new file mode 100644 index 0000000..9734078 Binary files /dev/null and b/sites/launchai/public/skeleton-one.png differ diff --git a/sites/launchai/public/tyler.jpeg b/sites/launchai/public/tyler.jpeg new file mode 100644 index 0000000..667f0dc Binary files /dev/null and b/sites/launchai/public/tyler.jpeg differ diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/analytics/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/analytics/page.tsx new file mode 100644 index 0000000..0586ba2 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/analytics/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/analytics/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/analytics/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/categories/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/categories/page.tsx new file mode 100644 index 0000000..4b50d6c --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/categories/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/categories/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/categories/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/claims/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/claims/page.tsx new file mode 100644 index 0000000..a3fe61d --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/claims/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/claims/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/claims/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/discovery/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/discovery/page.tsx new file mode 100644 index 0000000..bb70237 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/discovery/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/discovery/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/discovery/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/page.tsx new file mode 100644 index 0000000..df0a27b --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/reviews/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/reviews/page.tsx new file mode 100644 index 0000000..a42f9ac --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/reviews/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/reviews/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/reviews/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/submissions/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/submissions/page.tsx new file mode 100644 index 0000000..7ff5ca4 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/submissions/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/submissions/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/submissions/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/tags/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/tags/page.tsx new file mode 100644 index 0000000..516f034 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/tags/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tags/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tags/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/tools/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/tools/page.tsx new file mode 100644 index 0000000..364ce24 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tools/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tools/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/users/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/users/page.tsx new file mode 100644 index 0000000..f6c4ba4 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/users/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/users/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/users/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/admin/votes/page.tsx b/sites/launchai/src/app/[locale]/(admin)/admin/votes/page.tsx new file mode 100644 index 0000000..32fd76c --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/admin/votes/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(admin)/admin/votes/page.tsx 的薄路由 +export const revalidate = 0; +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/votes/page"; diff --git a/sites/launchai/src/app/[locale]/(admin)/layout.tsx b/sites/launchai/src/app/[locale]/(admin)/layout.tsx new file mode 100644 index 0000000..d58cb83 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(admin)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/layout"; diff --git a/sites/launchai/src/app/[locale]/(auth)/forgot-password/page.tsx b/sites/launchai/src/app/[locale]/(auth)/forgot-password/page.tsx new file mode 100644 index 0000000..737bb95 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(auth)/forgot-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/forgot-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/forgot-password/page"; diff --git a/sites/launchai/src/app/[locale]/(auth)/layout.tsx b/sites/launchai/src/app/[locale]/(auth)/layout.tsx new file mode 100644 index 0000000..2d015d0 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(auth)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/layout"; diff --git a/sites/launchai/src/app/[locale]/(auth)/login/page.tsx b/sites/launchai/src/app/[locale]/(auth)/login/page.tsx new file mode 100644 index 0000000..524b156 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(auth)/login/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/login/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/login/page"; diff --git a/sites/launchai/src/app/[locale]/(auth)/reset-password/page.tsx b/sites/launchai/src/app/[locale]/(auth)/reset-password/page.tsx new file mode 100644 index 0000000..69c68f4 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(auth)/reset-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/reset-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/reset-password/page"; diff --git a/sites/launchai/src/app/[locale]/(auth)/signup/page.tsx b/sites/launchai/src/app/[locale]/(auth)/signup/page.tsx new file mode 100644 index 0000000..414f955 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(auth)/signup/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/signup/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/signup/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx new file mode 100644 index 0000000..1e24e74 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/[slug]/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/ai-tools-for/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/ai-tools-for/page.tsx new file mode 100644 index 0000000..e17e80b --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/ai-tools-for/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/best/[slug]/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/best/[slug]/page.tsx new file mode 100644 index 0000000..a4f396b --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/best/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/[slug]/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/best/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/best/page.tsx new file mode 100644 index 0000000..af741b7 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/best/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/blog/[slug]/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/blog/[slug]/page.tsx new file mode 100644 index 0000000..ddcaf5c --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/blog/[slug]/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/[slug]/page.tsx 的薄路由 +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/[slug]/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/blog/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/blog/page.tsx new file mode 100644 index 0000000..e0aaa51 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/blog/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/category/[slug]/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/category/[slug]/page.tsx new file mode 100644 index 0000000..67bc8b7 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/category/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/category/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/category/[slug]/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/contact/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/contact/page.tsx new file mode 100644 index 0000000..38cf0af --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/contact/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/contact/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/contact/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/cookies/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/cookies/page.tsx new file mode 100644 index 0000000..6e27f11 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/cookies/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/cookies/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/cookies/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/layout.tsx b/sites/launchai/src/app/[locale]/(marketing)/layout.tsx new file mode 100644 index 0000000..0602321 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/layout.tsx @@ -0,0 +1,4 @@ +import { createMarketingLayout } from "@aidir/core/kit/create-marketing-layout"; +import { siteConfig } from "@/site/brand"; + +export default createMarketingLayout(siteConfig); diff --git a/sites/launchai/src/app/[locale]/(marketing)/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/page.tsx new file mode 100644 index 0000000..0afcbb9 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/page.tsx @@ -0,0 +1,9 @@ +import { createHomePage, createHomeMetadata } from "@aidir/core/kit/create-home"; +import { siteConfig } from "@/site/brand"; +import { SiteHome } from "@/site/home"; + +// 首页内容变化不频繁,ISR 每小时再生 +export const revalidate = 3600; + +export const generateMetadata = createHomeMetadata(siteConfig); +export default createHomePage(siteConfig, SiteHome); diff --git a/sites/launchai/src/app/[locale]/(marketing)/privacy/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/privacy/page.tsx new file mode 100644 index 0000000..ab85a20 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/privacy/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/privacy/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/privacy/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/rankings/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/rankings/page.tsx new file mode 100644 index 0000000..1b7854c --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/rankings/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/rankings/page.tsx 的薄路由 +export const revalidate = 1800; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/rankings/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/submit/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/submit/page.tsx new file mode 100644 index 0000000..5cd1d96 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/submit/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/submit/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/submit/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/terms/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/terms/page.tsx new file mode 100644 index 0000000..588ebc3 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/terms/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/terms/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/terms/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/tools/[slug]/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/tools/[slug]/page.tsx new file mode 100644 index 0000000..c88bbd2 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/tools/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/tools/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/[slug]/page"; diff --git a/sites/launchai/src/app/[locale]/(marketing)/tools/page.tsx b/sites/launchai/src/app/[locale]/(marketing)/tools/page.tsx new file mode 100644 index 0000000..ef24d90 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(marketing)/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/tools/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/page"; diff --git a/sites/launchai/src/app/[locale]/(protected)/dashboard/page.tsx b/sites/launchai/src/app/[locale]/(protected)/dashboard/page.tsx new file mode 100644 index 0000000..20940ed --- /dev/null +++ b/sites/launchai/src/app/[locale]/(protected)/dashboard/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/dashboard/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/dashboard/page"; diff --git a/sites/launchai/src/app/[locale]/(protected)/layout.tsx b/sites/launchai/src/app/[locale]/(protected)/layout.tsx new file mode 100644 index 0000000..9e15378 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(protected)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/layout"; diff --git a/sites/launchai/src/app/[locale]/(protected)/profile/page.tsx b/sites/launchai/src/app/[locale]/(protected)/profile/page.tsx new file mode 100644 index 0000000..cf5ba66 --- /dev/null +++ b/sites/launchai/src/app/[locale]/(protected)/profile/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/profile/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/profile/page"; diff --git a/sites/launchai/src/app/[locale]/check-email/page.tsx b/sites/launchai/src/app/[locale]/check-email/page.tsx new file mode 100644 index 0000000..0cf4d63 --- /dev/null +++ b/sites/launchai/src/app/[locale]/check-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/check-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/check-email/page"; diff --git a/sites/launchai/src/app/[locale]/layout.tsx b/sites/launchai/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..5141337 --- /dev/null +++ b/sites/launchai/src/app/[locale]/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/layout.tsx 的薄路由 +export { default, generateStaticParams } from "@aidir/core/pages/[locale]/layout"; diff --git a/sites/launchai/src/app/[locale]/verify-email/page.tsx b/sites/launchai/src/app/[locale]/verify-email/page.tsx new file mode 100644 index 0000000..28f07f2 --- /dev/null +++ b/sites/launchai/src/app/[locale]/verify-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/verify-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/verify-email/page"; diff --git a/sites/launchai/src/app/api/auth/[...all]/route.ts b/sites/launchai/src/app/api/auth/[...all]/route.ts new file mode 100644 index 0000000..3ad325b --- /dev/null +++ b/sites/launchai/src/app/api/auth/[...all]/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/[...all]/route.ts 的薄路由 +export { POST, GET } from "@aidir/core/pages/api/auth/[...all]/route"; diff --git a/sites/launchai/src/app/api/auth/forgot-password/route.ts b/sites/launchai/src/app/api/auth/forgot-password/route.ts new file mode 100644 index 0000000..04090fd --- /dev/null +++ b/sites/launchai/src/app/api/auth/forgot-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/forgot-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/forgot-password/route"; diff --git a/sites/launchai/src/app/api/auth/resend-verification/route.ts b/sites/launchai/src/app/api/auth/resend-verification/route.ts new file mode 100644 index 0000000..4e8ce70 --- /dev/null +++ b/sites/launchai/src/app/api/auth/resend-verification/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/resend-verification/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/resend-verification/route"; diff --git a/sites/launchai/src/app/api/auth/reset-password/route.ts b/sites/launchai/src/app/api/auth/reset-password/route.ts new file mode 100644 index 0000000..652eba4 --- /dev/null +++ b/sites/launchai/src/app/api/auth/reset-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/reset-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/reset-password/route"; diff --git a/sites/launchai/src/app/api/auth/verify-email/route.ts b/sites/launchai/src/app/api/auth/verify-email/route.ts new file mode 100644 index 0000000..c658aab --- /dev/null +++ b/sites/launchai/src/app/api/auth/verify-email/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-email/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-email/route"; diff --git a/sites/launchai/src/app/api/auth/verify-reset-token/route.ts b/sites/launchai/src/app/api/auth/verify-reset-token/route.ts new file mode 100644 index 0000000..02b6c76 --- /dev/null +++ b/sites/launchai/src/app/api/auth/verify-reset-token/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-reset-token/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-reset-token/route"; diff --git a/sites/launchai/src/app/api/newsletter/unsubscribe/route.ts b/sites/launchai/src/app/api/newsletter/unsubscribe/route.ts new file mode 100644 index 0000000..5bee9b9 --- /dev/null +++ b/sites/launchai/src/app/api/newsletter/unsubscribe/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/newsletter/unsubscribe/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/newsletter/unsubscribe/route"; diff --git a/sites/launchai/src/app/api/outbound/route.ts b/sites/launchai/src/app/api/outbound/route.ts new file mode 100644 index 0000000..fa3a252 --- /dev/null +++ b/sites/launchai/src/app/api/outbound/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/outbound/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/outbound/route"; diff --git a/sites/launchai/src/app/api/search/route.ts b/sites/launchai/src/app/api/search/route.ts new file mode 100644 index 0000000..d3f1006 --- /dev/null +++ b/sites/launchai/src/app/api/search/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/search/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/search/route"; diff --git a/sites/launchai/src/app/api/tools/[id]/vote/route.ts b/sites/launchai/src/app/api/tools/[id]/vote/route.ts new file mode 100644 index 0000000..56e4b5f --- /dev/null +++ b/sites/launchai/src/app/api/tools/[id]/vote/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/tools/[id]/vote/route.ts 的薄路由 +export { POST, DELETE } from "@aidir/core/pages/api/tools/[id]/vote/route"; diff --git a/sites/launchai/src/app/api/upload/image/route.ts b/sites/launchai/src/app/api/upload/image/route.ts new file mode 100644 index 0000000..bce8a93 --- /dev/null +++ b/sites/launchai/src/app/api/upload/image/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/image/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/image/route"; diff --git a/sites/launchai/src/app/api/upload/simple/route.ts b/sites/launchai/src/app/api/upload/simple/route.ts new file mode 100644 index 0000000..665aa2b --- /dev/null +++ b/sites/launchai/src/app/api/upload/simple/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/simple/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/simple/route"; diff --git a/sites/launchai/src/app/api/user/admin-status/route.ts b/sites/launchai/src/app/api/user/admin-status/route.ts new file mode 100644 index 0000000..46244da --- /dev/null +++ b/sites/launchai/src/app/api/user/admin-status/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/admin-status/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/admin-status/route"; diff --git a/sites/launchai/src/app/api/user/profile/route.ts b/sites/launchai/src/app/api/user/profile/route.ts new file mode 100644 index 0000000..3ddc7ff --- /dev/null +++ b/sites/launchai/src/app/api/user/profile/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/profile/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/profile/route"; diff --git a/sites/launchai/src/app/layout.tsx b/sites/launchai/src/app/layout.tsx new file mode 100644 index 0000000..01115cc --- /dev/null +++ b/sites/launchai/src/app/layout.tsx @@ -0,0 +1,3 @@ +import "@aidir/core/styles/globals.css"; + +export { default } from "@aidir/core/pages/app-layout"; diff --git a/sites/launchai/src/app/manifest.ts b/sites/launchai/src/app/manifest.ts new file mode 100644 index 0000000..c7fc70b --- /dev/null +++ b/sites/launchai/src/app/manifest.ts @@ -0,0 +1,2 @@ +// 自动生成:manifest.ts 的薄路由 +export { default } from "@aidir/core/pages/manifest"; diff --git a/sites/launchai/src/app/not-found.tsx b/sites/launchai/src/app/not-found.tsx new file mode 100644 index 0000000..cb56be7 --- /dev/null +++ b/sites/launchai/src/app/not-found.tsx @@ -0,0 +1,2 @@ +// 自动生成:not-found.tsx 的薄路由 +export { default } from "@aidir/core/pages/not-found"; diff --git a/sites/launchai/src/app/sitemap.ts b/sites/launchai/src/app/sitemap.ts new file mode 100644 index 0000000..c773151 --- /dev/null +++ b/sites/launchai/src/app/sitemap.ts @@ -0,0 +1,2 @@ +// 自动生成:sitemap.ts 的薄路由 +export { default } from "@aidir/core/pages/sitemap"; diff --git a/sites/launchai/src/i18n/request.ts b/sites/launchai/src/i18n/request.ts new file mode 100644 index 0000000..86f12f7 --- /dev/null +++ b/sites/launchai/src/i18n/request.ts @@ -0,0 +1,37 @@ +import { getRequestConfig } from "next-intl/server"; +import { notFound } from "next/navigation"; +import { locales, defaultLocale, type Locale } from "@aidir/core/i18n.config"; + +/** 站点品牌 SEO 文案覆盖(每个网站不同) */ +const brandMessages = { + en: { + seo: { home: {"title":"LaunchAI — Discover and Upvote Today's AI Products","description":"A daily launch feed for AI products. Upvote the best AI tools, follow makers and climb the leaderboard.","ogImage":"/og-image.png"} }, + hero: { title: "LaunchAI — Discover and Upvote Today's AI Products", description: "A daily launch feed for AI products. Upvote the best AI tools, follow makers and climb the leaderboard." }, + common: { brand: { name: "LaunchAI", tagline: "Discover and upvote today's AI products." } }, + }, + zh: { + seo: { home: {"title":"LaunchAI — 发现并投票今日 AI 新品","description":"AI 产品每日发布社区:为最好的 AI 工具投票,登上社区排行榜。","ogImage":"/og-image.png"} }, + hero: { title: "LaunchAI — 发现并投票今日 AI 新品", description: "AI 产品每日发布社区:为最好的 AI 工具投票,登上社区排行榜。" }, + common: { brand: { name: "LaunchAI", tagline: "Discover and upvote today's AI products." } }, + }, +} as const; + +export default getRequestConfig(async ({ requestLocale }) => { + let locale = await requestLocale; + if (!locale || !locales.includes(locale as Locale)) { + locale = defaultLocale; + } + try { + // 底座基础文案 + 站点品牌覆盖(浅合并到顶层命名空间) + const base = (await import(`../../messages/${locale}.json`)).default; + const override = brandMessages[locale as keyof typeof brandMessages]; + const messages = { ...base }; + for (const [ns, value] of Object.entries(override)) { + messages[ns] = { ...(messages[ns] ?? {}), ...value }; + } + return { locale, messages }; + } catch (error) { + console.error("Error loading messages for locale:", locale, error); + notFound(); + } +}); diff --git a/sites/launchai/src/proxy.ts b/sites/launchai/src/proxy.ts new file mode 100644 index 0000000..eec3c1e --- /dev/null +++ b/sites/launchai/src/proxy.ts @@ -0,0 +1,10 @@ +import { proxy } from "@aidir/core/proxy"; + +export default proxy; + +export const config = { + matcher: [ + "/", + "/((?!api|_next|_vercel|.*\\..*).*)" + ] +}; diff --git a/sites/launchai/src/site/brand.tsx b/sites/launchai/src/site/brand.tsx new file mode 100644 index 0000000..4fee9d8 --- /dev/null +++ b/sites/launchai/src/site/brand.tsx @@ -0,0 +1,103 @@ +import type { SiteConfig } from "@/kit/types"; + +// LaunchAI —— 独立站点的全部品牌/导航/页脚配置 +export const siteConfig: SiteConfig = { + "port": 3002, + "brand": { + "name": "LaunchAI", + "tagline": "Discover and upvote today's AI products.", + "headline": "Today's AI product launches", + "subheadline": "Fresh AI products, every day. Upvote the best ones to the top." + }, + "navItems": [ + { + "label": "Today", + "href": "/" + }, + { + "label": "Leaderboard", + "href": "/rankings" + }, + { + "label": "Categories", + "href": "/tools" + }, + { + "label": "Collections", + "href": "/best" + }, + { + "label": "Blog", + "href": "/blog" + }, + { + "label": "Submit", + "href": "/submit" + } + ], + "footerGroups": [ + { + "title": "Community", + "links": [ + { + "label": "Submit a Product", + "href": "/submit" + }, + { + "label": "Leaderboard", + "href": "/rankings" + }, + { + "label": "Dashboard", + "href": "/dashboard" + } + ] + }, + { + "title": "Explore", + "links": [ + { + "label": "All Products", + "href": "/tools" + }, + { + "label": "Use Cases", + "href": "/ai-tools-for" + }, + { + "label": "Collections", + "href": "/best" + } + ] + }, + { + "title": "About", + "links": [ + { + "label": "Blog", + "href": "/blog" + }, + { + "label": "Terms", + "href": "/terms" + }, + { + "label": "Privacy", + "href": "/privacy" + } + ] + } + ], + "searchPlaceholder": "Search AI products...", + "seo": { + "en": { + "title": "LaunchAI — Discover and Upvote Today's AI Products", + "description": "A daily launch feed for AI products. Upvote the best AI tools, follow makers and climb the leaderboard." + }, + "zh": { + "title": "LaunchAI — 发现并投票今日 AI 新品", + "description": "AI 产品每日发布社区:为最好的 AI 工具投票,登上社区排行榜。" + } + }, + "id": "launchai" +}; diff --git a/sites/launchai/src/site/home.tsx b/sites/launchai/src/site/home.tsx new file mode 100644 index 0000000..51fd621 --- /dev/null +++ b/sites/launchai/src/site/home.tsx @@ -0,0 +1,256 @@ +// 自动生成:站点首页组件(源自底座 product 形态,品牌来自 @/site/brand) +import { siteConfig } from "@/site/brand"; +import { Flame, Trophy, Rocket, ChevronRight, MessageSquare } from "lucide-react"; +import { VoteButton } from "@/features/voting/components/vote-button"; +import { LocaleLink } from "@/components/locale-link"; +import { ToolLogo } from "@/components/tool-logo"; +import { SectionHeader } from "@/kit/section"; +import { getHomeDataSafe } from "@/kit/home-data"; + +/** Product:AI 产品社区(Daily Launch / Upvote / Maker) */ + + +const navItems = [ + { label: "Today", href: "/" }, + { label: "Leaderboard", href: "/rankings" }, + { label: "Categories", href: "/tools" }, + { label: "Collections", href: "/best" }, + { label: "Blog", href: "/blog" }, + { label: "Submit", href: "/submit" }, +]; + +const footerGroups = [ + { + title: "Community", + links: [ + { label: "Submit a Product", href: "/submit" }, + { label: "Leaderboard", href: "/rankings" }, + { label: "Dashboard", href: "/dashboard" }, + ], + }, + { + title: "Explore", + links: [ + { label: "All Products", href: "/tools" }, + { label: "Use Cases", href: "/ai-tools-for" }, + { label: "Collections", href: "/best" }, + ], + }, + { + title: "About", + links: [ + { label: "Blog", href: "/blog" }, + { label: "Terms", href: "/terms" }, + { label: "Privacy", href: "/privacy" }, + ], + }, +]; + +/** 单条 Launch 卡片:PH 风格(大投票块 + 产品信息 + 互动) */ +function LaunchRow({ + tool, + locale, + rank, +}: { + tool: { + id: string; + slug: string; + nameEn: string; + nameZh: string | null; + taglineEn: string | null; + taglineZh: string | null; + descriptionEn: string | null; + descriptionZh: string | null; + logoUrl: string | null; + voteCount: number; + reviewCount: number; + }; + locale: string; + rank?: number; +}) { + const name = locale === "zh" && tool.nameZh ? tool.nameZh : tool.nameEn; + const tagline = + locale === "zh" + ? tool.taglineZh || tool.descriptionZh || tool.taglineEn + : tool.taglineEn || tool.descriptionEn || tool.taglineZh; + + return ( +
+ {typeof rank === "number" && ( + + {rank} + + )} + + +
+ +

+ {name} +

+
+

{tagline}

+
+ + + {tool.reviewCount} reviews + +
+
+ +
+ ); +} + +async function SiteHome({ locale }: { locale: string }) { + const data = await getHomeDataSafe(10); + + return ( +
+ {/* Hero:今日发布 */} +
+
+

+ {siteConfig.brand.headline} +

+

+ {siteConfig.brand.subheadline} +

+ + + Launch your product + +
+
+ +
+ {/* 产品 Feed */} +
+
+
+ +

Today's feed

+
+ {data.trending.length > 0 ? ( + data.trending.map((tool, i) => ( + + )) + ) : ( +

+ No launches yet — be the first to submit. +

+ )} + + Browse all products + + +
+ + {/* New */} + {data.newest.length > 0 && ( +
+ +
+ {data.newest.slice(0, 5).map((tool) => ( + + ))} +
+
+ )} +
+ + {/* 侧边栏榜单 */} + +
+
+ ); +} + +export { SiteHome }; diff --git a/sites/launchai/tailwind.config.ts b/sites/launchai/tailwind.config.ts new file mode 100644 index 0000000..c4729ec --- /dev/null +++ b/sites/launchai/tailwind.config.ts @@ -0,0 +1,11 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./src/**/*.{js,ts,jsx,tsx,mdx}", + "../../packages/core/src/**/*.{js,ts,jsx,tsx,mdx}", + ], + presets: [require("../../packages/core/tailwind.preset.cjs")], +}; + +export default config; diff --git a/sites/launchai/tsconfig.json b/sites/launchai/tsconfig.json new file mode 100644 index 0000000..95fd293 --- /dev/null +++ b/sites/launchai/tsconfig.json @@ -0,0 +1,64 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./src/*", + "../../packages/core/src/*" + ], + "@aidir/core/pages/*": [ + "../../packages/core/src/pages/*" + ], + "@aidir/core/kit/*": [ + "../../packages/core/src/kit/*" + ], + "@aidir/core/src/*": [ + "../../packages/core/src/*" + ], + "@aidir/core/proxy": [ + "../../packages/core/src/proxy.ts" + ], + "@aidir/core/i18n.config": [ + "../../packages/core/src/i18n.config.ts" + ], + "@aidir/core/styles/globals.css": [ + "../../packages/core/src/styles/globals.css" + ], + "@aidir/core/*": [ + "../../packages/core/src/*", + "../../packages/core/*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/sites/the-ai-ledger/.env.example b/sites/the-ai-ledger/.env.example new file mode 100644 index 0000000..0c7f90b --- /dev/null +++ b/sites/the-ai-ledger/.env.example @@ -0,0 +1,14 @@ +# The AI Ledger 环境变量(与底座共享同一套 PostgreSQL / Better Auth / Admin) +DATABASE_URL="postgresql://postgres:postgres@127.0.0.1:15433/ai_directory" +BETTER_AUTH_SECRET="dev-secret-ai-directory-platform-0123456789abcdef" +BETTER_AUTH_URL="http://localhost:3003" +AUTH_GOOGLE_ID="" +AUTH_GOOGLE_SECRET="" +NEXT_PUBLIC_AUTH_GOOGLE_ENABLED="false" +AUTH_GITHUB_ID="" +AUTH_GITHUB_SECRET="" +NEXT_PUBLIC_AUTH_GITHUB_ENABLED="false" +RESEND_API_KEY="" +RESEND_FROM_EMAIL="The AI Ledger " +NEXT_PUBLIC_APP_URL="http://localhost:3003" +NEXT_PUBLIC_APP_NAME="The AI Ledger" diff --git a/sites/the-ai-ledger/.gitignore b/sites/the-ai-ledger/.gitignore new file mode 100644 index 0000000..309faff --- /dev/null +++ b/sites/the-ai-ledger/.gitignore @@ -0,0 +1,5 @@ +/node_modules +/.next +/.env*.local +next-env.d.ts +*.tsbuildinfo diff --git a/sites/the-ai-ledger/mdx-components.tsx b/sites/the-ai-ledger/mdx-components.tsx new file mode 100644 index 0000000..2a15d84 --- /dev/null +++ b/sites/the-ai-ledger/mdx-components.tsx @@ -0,0 +1 @@ +export { useMDXComponents } from "@aidir/core/src/mdx-components"; diff --git a/sites/the-ai-ledger/messages/en.json b/sites/the-ai-ledger/messages/en.json new file mode 100644 index 0000000..23a2d45 --- /dev/null +++ b/sites/the-ai-ledger/messages/en.json @@ -0,0 +1,796 @@ +{ + "common": { + "brand": { + "name": "The AI Ledger", + "tagline": "Independent journalism on AI tools, with a community-ranked directory.", + "copyright": "Copyright © 2025", + "allRightsReserved": "All rights reserved" + }, + "actions": { + "signIn": "Sign in", + "signUp": "Sign Up", + "signOut": "Sign Out", + "getStarted": "Get Started", + "startFree": "Start Free", + "learnMore": "Learn More", + "viewAll": "View All", + "submit": "Submit", + "cancel": "Cancel", + "save": "Save", + "delete": "Delete", + "edit": "Edit", + "update": "Update", + "continue": "Continue", + "back": "Back", + "next": "Next", + "contactSales": "Contact Sales", + "startTrial": "Start Free Trial" + }, + "status": { + "loading": "Loading...", + "verified": "Verified", + "pending": "Pending", + "active": "Active", + "inactive": "Inactive" + } + }, + "navigation": { + "main": { + "tools": "Tools", + "blog": "Blog", + "contact": "Contact", + "dashboard": "Dashboard", + "profile": "Profile" + }, + "footer": { + "legal": { + "terms": "Terms of Service", + "privacy": "Privacy Policy", + "cookies": "Cookie Policy" + }, + "social": { + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "Discover the Best AI Tools", + "title": "The AI Ledger — AI Tools, Reviewed and Ranked", + "description": "Independent journalism on AI: buying guides, comparisons and a community-ranked directory of the best AI tools.", + "cta": { + "primary": "Explore Tools", + "secondary": "Read Blog" + } + }, + "features": { + "title": "Everything You Need to Build Fast", + "subtitle": "Stop wasting time on boilerplate. Focus on your unique features while this template handles the foundation.", + "items": { + "aiOptimized": { + "title": "Modern Tech Stack", + "description": "Built with Next.js 14, TypeScript, Tailwind CSS, and PostgreSQL. Production-ready from day one." + }, + "zeroPipeline": { + "title": "Authentication Ready", + "description": "Email/password and Google OAuth configured. Session management and protected routes ready to use." + }, + "nonTechnical": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management. Monitor your users and manage permissions easily." + }, + "productionGrade": { + "title": "Blog System Included", + "description": "MDX-powered blog with i18n support. Create content in multiple languages with SEO optimization." + } + } + }, + "testimonials": { + "title": "Trusted by AI Enthusiasts", + "subtitle": "Join thousands of users discovering the best AI tools for their workflows.", + "items": [ + { + "name": "Sarah Chen", + "quote": "Toolso.AI helped me find the perfect AI writing assistant. The categorization makes discovery so easy!", + "designation": "Content Creator" + }, + { + "name": "Michael Park", + "quote": "Finally, a comprehensive AI tools directory that's well-organized. Saved me hours of research.", + "designation": "Product Manager" + }, + { + "name": "Emily Rodriguez", + "quote": "I discover new AI tools every week on Toolso.AI. It's become my go-to resource for AI exploration.", + "designation": "Startup Founder" + }, + { + "name": "David Kim", + "quote": "The search and filter features are incredibly helpful. Found exactly what I needed in minutes.", + "designation": "Software Engineer" + }, + { + "name": "Lisa Wang", + "quote": "Love the multilingual support! Makes it easy to explore AI tools in both English and Chinese.", + "designation": "Digital Marketer" + }, + { + "name": "James Liu", + "quote": "Great resource for staying up-to-date with the latest AI tools. The blog section is also very informative.", + "designation": "AI Researcher" + } + ] + }, + "companies": { + "title": "Built with Industry-Leading Technologies", + "subtitle": "Built on modern stack trusted by the world's best teams" + }, + "gridFeatures": { + "aiReady": { + "title": "Extensible Architecture", + "description": "Clean, modular code structure. Easy to add new features and integrations." + }, + "creem": { + "title": "Database Ready", + "description": "PostgreSQL with Drizzle ORM configured. Type-safe queries and migrations ready." + }, + "auth": { + "title": "Authentication System", + "description": "Better Auth with email/password and OAuth. Session management and protected routes ready." + }, + "deploy": { + "title": "One-Click Deploy", + "description": "Deploy to Vercel, Railway, or any platform instantly. Production-ready from day one." + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "Modern tech stack with Next.js 14, TypeScript, Tailwind CSS, and shadcn/ui components." + }, + "database": { + "title": "Admin Dashboard", + "description": "Complete admin panel for user management and system monitoring." + }, + "seo": { + "title": "SEO & Marketing", + "description": "Meta tags, Open Graph, sitemap, and analytics. Everything for organic growth." + }, + "vibeCoding": { + "title": "Blog System", + "description": "MDX-powered blog with multi-language support. Create content that ranks." + } + }, + "cta": { + "title": "Find Your Perfect AI Tool", + "description": "Browse our curated collection of AI tools and discover what works best for you.", + "button": "Explore Tools" + }, + "auth": { + "login": { + "title": "Sign in to your account", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "forgotPassword": "Forgot password?", + "noAccount": "Don't have an account?", + "signUpLink": "Sign Up", + "signInButton": "Sign in", + "signingIn": "Signing in...", + "errors": { + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "loginFailed": "Login failed. Please try again.", + "googleLoginFailed": "Google login failed. Please try again." + } + }, + "signup": { + "title": "Sign up for an account", + "nameLabel": "Full name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "hasAccount": "Already have an account?", + "signInLink": "Sign in", + "signUpButton": "Sign Up", + "signingUp": "Signing up...", + "errors": { + "nameRequired": "Please enter your name", + "invalidEmail": "Please enter valid email", + "emailRequired": "Please enter email", + "passwordRequired": "Please enter password", + "signupFailed": "Sign up failed. Please try again.", + "googleSignupFailed": "Google sign up failed. Please try again." + } + }, + "social": { + "googleSignIn": "Continue with Google", + "or": "Or continue with", + "githubSignIn": "Continue with GitHub" + }, + "checkEmail": { + "title": "Check Your Email", + "description": "We've sent a verification link to your email address. Please click the link to verify your account and get started.", + "notReceived": "Didn't receive the email?", + "checkSpam": "Check your spam or junk folder", + "checkEmailCorrect": "Make sure you entered the correct email", + "waitAndCheck": "Wait a few minutes and check again", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent successfully! Please check your inbox.", + "resendError": "Failed to resend verification email.", + "backToLogin": "Back to Login", + "securityNote": "For your security, the verification link will expire in 24 hours." + }, + "verifyEmail": { + "verifying": "Verifying Email", + "verifyingDescription": "Please wait while we verify your email address...", + "success": "Email Verified!", + "successDescription": "Your email has been successfully verified! Redirecting to login...", + "alreadyVerified": "Already Verified", + "failed": "Verification Failed", + "goToLogin": "Go to Login", + "backToSignUp": "Back to Sign Up", + "requestNew": "Request New Verification Email", + "checkSpamNote": "Check your spam folder if you don't see our emails" + }, + "emailVerifiedGuard": { + "title": "Email Verification Required", + "description": "Please verify your email address to access this page. Check your inbox for the verification link we sent to:", + "resendButton": "Resend Verification Email", + "resending": "Sending...", + "resendSuccess": "Verification email sent! Please check your inbox.", + "resendError": "Failed to send verification email. Please try again.", + "signOutLink": "Sign out and try a different account" + } + }, + "Admin": { + "sidebar": { + "title": "Admin Panel", + "subtitle": "System Management", + "dashboard": "Dashboard", + "tools": "Tools", + "categories": "Categories", + "tags": "Tags", + "users": "Users", + "backToDashboard": "Back to User Dashboard", + "submissions": "Submissions", + "claims": "Claims", + "reviews": "Reviews", + "discovery": "Discovery", + "votes": "Vote Audit", + "analytics": "Analytics" + }, + "header": { + "welcome": "Welcome", + "adminBadge": "Admin" + }, + "dashboard": { + "title": "Admin Dashboard", + "totalUsers": "Total Users", + "activeUsers": "Active Users", + "recentUsers": "Recent Users", + "viewAllUsers": "View All Users" + }, + "toolsManagement": { + "title": "Tools Management", + "totalCount": "{count} tools", + "searchPlaceholder": "Search tool name or slug...", + "allStatus": "All Status", + "published": "Published", + "draft": "Draft", + "addTool": "Add Tool", + "tool": "Tool", + "slug": "Slug", + "status": "Status", + "createdAt": "Created", + "actions": "Actions", + "noData": "No tools data", + "previous": "Previous", + "next": "Next", + "confirmDelete": "Are you sure you want to delete \"{name}\"? This action cannot be undone.", + "deleted": "Tool deleted", + "deleteFailed": "Delete failed", + "statusUpdated": "Status updated", + "statusUpdateFailed": "Status update failed", + "toDraft": "Set to draft", + "publish": "Publish", + "edit": "Edit", + "visitWebsite": "Visit website", + "delete": "Delete", + "modal": { + "editTitle": "Edit Tool", + "addTitle": "Add Tool", + "basicInfo": "Basic Information", + "linksAndImages": "Links & Images", + "categories": "Categories", + "tags": "Tags", + "slug": "Slug", + "status": "Status", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "domain": "Domain", + "websiteUrl": "Website URL", + "logoUrl": "Logo URL", + "coverImageUrl": "Cover Image URL", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTool": "Create Tool", + "requiredField": "Please fill in required fields", + "updated": "Tool updated", + "created": "Tool created", + "updateFailed": "Update failed", + "createFailed": "Create failed", + "statusDraft": "Draft", + "statusPublished": "Published", + "pricing": "Pricing", + "pricingNone": "Not set", + "pricingFree": "Free", + "pricingFreemium": "Freemium", + "pricingPaid": "Paid", + "featured": "Featured on homepage" + } + }, + "categoriesManagement": { + "title": "Categories Management", + "addCategory": "Add Category", + "order": "Order", + "category": "Category", + "slug": "Slug", + "toolCount": "Tools", + "toolCountLabel": "{count} tools", + "actions": "Actions", + "noData": "No categories data", + "edit": "Edit", + "delete": "Delete", + "cannotDelete": "This category has {count} tools, cannot delete", + "confirmDelete": "Are you sure you want to delete category \"{name}\"?", + "deleted": "Category deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Category", + "addTitle": "Add Category", + "slug": "Slug", + "icon": "Icon (emoji)", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "sortOrder": "Sort Order", + "descriptionEn": "English Description", + "descriptionZh": "Chinese Description", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createCategory": "Create Category", + "requiredField": "Please fill in required fields", + "updated": "Category updated", + "created": "Category created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "tagsManagement": { + "title": "Tags Management", + "searchPlaceholder": "Search tags...", + "addTag": "Add Tag", + "toolCountLabel": "{count} tools", + "noData": "No tags data", + "edit": "Edit", + "delete": "Delete", + "confirmDeleteWithTools": "This tag is used by {count} tools. Deleting it will remove the tag from these tools. Continue?", + "confirmDelete": "Are you sure you want to delete tag \"{name}\"?", + "deleted": "Tag deleted", + "deleteFailed": "Delete failed", + "modal": { + "editTitle": "Edit Tag", + "addTitle": "Add Tag", + "slug": "Slug", + "nameEn": "English Name", + "nameZh": "Chinese Name", + "cancel": "Cancel", + "saving": "Saving...", + "saveChanges": "Save Changes", + "createTag": "Create Tag", + "requiredField": "Please fill in required fields", + "updated": "Tag updated", + "created": "Tag created", + "updateFailed": "Update failed", + "createFailed": "Create failed" + } + }, + "users": { + "searchPlaceholder": "Search by name or email...", + "user": "User", + "role": "Role", + "status": "Status", + "joined": "Joined", + "actions": "Actions", + "admin": "Admin", + "banned": "Banned", + "active": "Active", + "unverified": "Unverified", + "verified": "Verified", + "emailVerified": "Email Verified", + "edit": "Edit", + "ban": "Ban", + "unban": "Unban", + "viewDetails": "View Details", + "banReason": "Ban Reason", + "banExpires": "Ban Expires", + "userDetails": "User Details", + "name": "Name", + "email": "Email", + "lastActive": "Last Active", + "close": "Close", + "roleUpdated": "Role updated successfully", + "roleUpdateFailed": "Failed to update role", + "userBanned": "User has been banned", + "userUnbanned": "User has been unbanned", + "banFailed": "Failed to ban/unban user", + "cancel": "Cancel", + "pagination": { + "previous": "Previous", + "next": "Next", + "page": "Page {current} of {total}" + } + } + }, + "dashboard": { + "title": "Dashboard", + "welcome": "Welcome back", + "cards": { + "personalInfo": { + "title": "Personal Info", + "labels": { + "name": "Name", + "email": "Email", + "status": "Status", + "notSet": "Not set" + } + }, + "quickActions": { + "title": "Quick Actions", + "editProfile": "Edit Profile", + "accountSettings": "Account Settings", + "securitySettings": "Security Settings" + } + }, + "favorites": { + "title": "My Favorites", + "empty": "No favorite tools yet.", + "browseTools": "Browse tools and save your favorites" + } + }, + "profile": { + "title": "Profile", + "subtitle": "Manage your account settings and preferences", + "sections": { + "basicInfo": { + "title": "Basic Information", + "fullName": "Full Name", + "email": "Email Address", + "verificationStatus": "Verification Status", + "notSet": "Not set", + "nameNotSet": "Name not set", + "accountId": "Account ID" + }, + "accountSettings": { + "title": "Account Settings", + "memberSince": "Member Since", + "lastLogin": "Last Login", + "accountType": "Account Type" + } + }, + "form": { + "nameLabel": "Name", + "namePlaceholder": "Enter your name", + "emailLabel": "Email", + "emailPlaceholder": "Enter your email", + "updateButton": "Update Profile", + "updating": "Updating...", + "updateSuccess": "Profile updated successfully!", + "updateError": "Failed to update profile. Please try again." + } + }, + "contact": { + "title": "Contact Us", + "subtitle": "We'd love to hear from you. Send us a message and we'll respond as soon as possible.", + "description": "Please reach out to us and we will get back to you shortly.", + "testimonial": { + "title": "We're here to help", + "description": "Our team is ready to assist you with any questions or feedback." + }, + "form": { + "nameLabel": "Full Name", + "namePlaceholder": "John Doe", + "emailLabel": "Email address", + "emailPlaceholder": "hello@example.com", + "companyLabel": "Company", + "companyPlaceholder": "Your Company", + "messageLabel": "Message", + "messagePlaceholder": "Enter your message here", + "submitButton": "Submit", + "submitting": "Sending...", + "submitSuccess": "Message sent successfully!", + "submitError": "Failed to send message. Please try again." + } + }, + "blog": { + "title": "Blog", + "subtitle": "Latest insights and updates from our team", + "readMore": "Read More", + "minRead": "min read" + }, + "errors": { + "404": { + "title": "404 - Page Not Found", + "message": "The page you are looking for doesn't exist.", + "backHome": "Go to Homepage" + }, + "500": { + "title": "Something Went Wrong", + "message": "We're experiencing technical difficulties. Please try again later.", + "backHome": "Back to Home" + }, + "general": { + "title": "An Error Occurred", + "message": "Something unexpected happened. Please try again.", + "tryAgain": "Try Again" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "John Doe", + "designation": "Software Engineer" + }, + { + "name": "Jane Smith", + "designation": "Product Manager" + }, + { + "name": "Bob Johnson", + "designation": "Designer" + }, + { + "name": "Alice Brown", + "designation": "Developer" + } + ] + }, + "footer": { + "tagline": "Discover the best AI tools to boost your productivity.", + "product": { + "title": "Product", + "features": "Features", + "documentation": "Documentation" + }, + "company": { + "title": "Company", + "about": "About", + "blog": "Blog", + "careers": "Careers" + }, + "legal": { + "title": "Legal", + "privacy": "Privacy", + "terms": "Terms", + "cookies": "Cookies" + }, + "social": { + "title": "Social", + "twitter": "Twitter", + "linkedin": "LinkedIn", + "github": "GitHub" + }, + "newsletter": { + "title": "Subscribe to Newsletter", + "description": "Get the latest updates and news directly in your inbox.", + "placeholder": "Enter your email", + "subscribe": "Subscribe", + "success": "Subscribed! Thanks for joining.", + "invalidEmail": "Please enter a valid email address.", + "error": "Subscription failed. Please try again." + } + }, + "tools": { + "title": "AI Tools Directory", + "subtitle": "Discover the best AI tools to boost your productivity", + "searchPlaceholder": "Search tools...", + "all": "All", + "foundTools": "Found {count} tools", + "visitWebsite": "Visit website", + "noTools": "No tools found", + "backToTools": "Back to tools", + "about": "About", + "categories": "Categories", + "tags": "Tags", + "visitButton": "Visit Website", + "toolInfo": "Tool Info", + "domain": "Domain", + "added": "Added", + "notFound": "Tool Not Found", + "favorites": { + "add": "Save to Favorites", + "remove": "Remove from Favorites", + "loginRequired": "Please sign in to save favorites", + "error": "Action failed. Please try again." + }, + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid" + }, + "categoryPage": { + "viewAll": "View all {count} tools" + }, + "reviewCta": "Ratings and reviews come from verified community members. Voted Helpful counts are shown next to each review.", + "alternatives": "Alternatives", + "seeAllAlternatives": "See all alternatives", + "stats": { + "votes": "Upvotes", + "views": "Views" + }, + "share": { + "share": "Share", + "copy": "Copy", + "copyLink": "Copy link", + "copied": "Link copied to clipboard" + }, + "sort": { + "latest": "Latest", + "trending": "Trending" + } + }, + "seo": { + "home": { + "title": "The AI Ledger — AI Tools, Reviewed and Ranked", + "description": "Independent journalism on AI: buying guides, comparisons and a community-ranked directory of the best AI tools.", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "Blog - Toolso.AI", + "description": "Latest insights, tutorials and updates about AI tools. Stay informed about the best AI tools and industry trends.", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "Contact Us - Toolso.AI", + "description": "Get in touch with us. We'd love to hear your feedback and tool suggestions.", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "Login - Toolso.AI", + "description": "Sign in to your account to submit tools, save favorites, and contribute to our AI tools directory.", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "Sign Up - Toolso.AI", + "description": "Create your account and start contributing to our AI tools directory. Submit tools and join our community.", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "Terms of Service - Toolso.AI", + "description": "Read our terms of service to understand the rules and guidelines for using Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "Privacy Policy - Toolso.AI", + "description": "Learn how we collect, use, and protect your personal information and data on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie Policy - Toolso.AI", + "description": "Understand how we use cookies and similar tracking technologies on Toolso.AI.", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI Tools Directory - Discover the Best AI Tools", + "description": "Explore our curated collection of AI tools. Find the best AI tools for productivity, creativity, and more." + } + }, + "featuredTools": { + "title": "Featured Tools", + "subtitle": "Curated collection of AI tools to boost your productivity", + "visitWebsite": "Visit website", + "empty": "No tools yet. Add some in the admin panel.", + "viewAll": "View All Tools" + }, + "voting": { + "vote": "Upvote", + "voted": "Upvoted", + "unvote": "Remove vote", + "loginRequired": "Please sign in to vote — you'll be brought right back.", + "rateLimited": "Slow down a bit — too many votes in a short time.", + "error": "Vote failed. Please try again." + }, + "reviews": { + "title": "Reviews", + "writeReview": "Write a review", + "empty": "No reviews yet — be the first to share your experience.", + "loadMore": "Load more", + "loading": "Loading...", + "helpful": "Helpful", + "verifiedUser": "Verified user", + "pros": "Pros", + "cons": "Cons", + "yourRating": "Your rating", + "ratingRequired": "Please pick a star rating first.", + "titlePlaceholder": "Sum it up in one line (optional)", + "contentPlaceholder": "What did you use it for? How well does it work?", + "prosPlaceholder": "What do you like about it?", + "consPlaceholder": "What could be better?", + "useCasePlaceholder": "Your use case (e.g. social media content)", + "saving": "Saving...", + "submit": "Publish review", + "update": "Update review", + "cancel": "Cancel", + "delete": "Delete my review", + "deleted": "Review deleted", + "tooShort": "Review is a bit short — tell us at least a sentence.", + "error": "Could not save your review. Please try again.", + "basedOn": "Based on {count} reviews" + }, + "submission": { + "name": "Tool name", + "websiteUrl": "Website URL", + "tagline": "Tagline", + "taglinePlaceholder": "One-line pitch shown on cards", + "description": "Description", + "descriptionPlaceholder": "What does it do? Who is it for? What makes it different?", + "logoUrl": "Logo URL", + "category": "Category", + "pricingLabel": "Pricing model", + "pricing": { + "free": "Free", + "freemium": "Freemium", + "paid": "Paid", + "freeTrial": "Free Trial", + "openSource": "Open Source", + "contact": "Contact for pricing" + }, + "founderName": "Founder / company", + "contactEmail": "Contact email", + "socialLinks": "Social links", + "note": "Notes for the editors", + "notePlaceholder": "Anything that helps us review faster (launch date, metrics...)", + "selectPlaceholder": "Select...", + "submit": "Submit for review", + "submitting": "Submitting...", + "submitted": "Submitted! We'll review it within 48 hours.", + "reviewNote": "Free listing · reviewed within 48h", + "duplicateFound": "Looks like this tool may already be listed:", + "duplicateBlocked": "This tool appears to be already listed. Duplicate submissions are not allowed.", + "error": "Submission failed. Please check your inputs." + }, + "claim": { + "claimThisTool": "Claim this tool", + "verifiedOwner": "Verified owner", + "formTitle": "Claim ownership of this listing", + "rolePlaceholder": "Your role (e.g. Founder, Marketing lead)", + "messagePlaceholder": "How should we verify you? (same-domain email, press page...)", + "proofPlaceholder": "Proof URL (optional)", + "submit": "Send claim", + "submitting": "Sending...", + "submitted": "Claim sent! We'll review it shortly.", + "pendingExists": "You already have a pending claim for this tool.", + "cancel": "Cancel", + "error": "Could not send your claim." + }, + "rankings": { + "title": "Community Rankings", + "subtitle": "Seven live leaderboards powered by votes, reviews, saves and engagement — not sponsored placement.", + "trending": "Trending", + "popular": "Popular", + "mostVoted": "Most Voted", + "mostSaved": "Most Saved", + "highestRated": "Highest Rated", + "new": "New", + "editorsChoice": "Editor's Choice", + "empty": "No tools on this board yet." + } +} diff --git a/sites/the-ai-ledger/messages/zh.json b/sites/the-ai-ledger/messages/zh.json new file mode 100644 index 0000000..9dd16f5 --- /dev/null +++ b/sites/the-ai-ledger/messages/zh.json @@ -0,0 +1,804 @@ +{ + "common": { + "brand": { + "name": "The AI Ledger", + "tagline": "Independent journalism on AI tools, with a community-ranked directory.", + "copyright": "版权所有 © 2025", + "allRightsReserved": "保留所有权利" + }, + "actions": { + "signIn": "登录", + "signUp": "注册", + "signOut": "退出登录", + "getStarted": "开始使用", + "startFree": "免费开始", + "startTrial": "开始试用", + "contactSales": "联系销售", + "learnMore": "了解更多", + "viewAll": "查看全部", + "submit": "提交", + "cancel": "取消", + "save": "保存", + "delete": "删除", + "edit": "编辑", + "update": "更新", + "continue": "继续", + "back": "返回", + "next": "下一步" + }, + "status": { + "loading": "加载中...", + "verified": "已验证", + "pending": "待处理", + "active": "已激活", + "inactive": "未激活" + } + }, + "navigation": { + "main": { + "tools": "工具库", + "blog": "博客", + "contact": "联系我们", + "dashboard": "仪表盘", + "profile": "个人资料" + }, + "footer": { + "legal": { + "terms": "服务条款", + "privacy": "隐私政策", + "cookies": "Cookie 政策" + }, + "social": { + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + } + } + }, + "hero": { + "badge": "发现最好的 AI 工具", + "title": "The AI Ledger — AI 工具评测与排名", + "description": "独立 AI 媒体:深度指南、横向对比,以及由社区排名的 AI 工具目录。", + "cta": { + "primary": "探索工具", + "secondary": "阅读博客" + } + }, + "features": { + "title": "开始构建所需的一切", + "subtitle": "告别重复的样板代码。专注于你的独特功能,基础设施已为你准备就绪。", + "items": { + "aiOptimized": { + "title": "现代技术栈", + "description": "基于 Next.js 14、TypeScript、Tailwind CSS 和 PostgreSQL 构建。采用行业最佳实践和企业级架构。" + }, + "zeroPipeline": { + "title": "开箱即用的认证", + "description": "Better Auth 驱动的完整认证系统,支持邮箱密码和 OAuth 登录、邮箱验证、密码重置和会话管理。" + }, + "nonTechnical": { + "title": "管理后台", + "description": "功能齐全的管理面板,包含用户管理、角色权限控制和业务数据监控。轻松扩展满足你的需求。" + }, + "productionGrade": { + "title": "博客系统", + "description": "内置 MDX 博客系统,支持语法高亮、SEO 优化和国际化。非常适合内容营销和产品更新。" + } + } + }, + "testimonials": { + "title": "用户评价", + "subtitle": "来自使用 Toolso.AI 发现优质 AI 工具的真实用户反馈。", + "items": [ + { + "name": "张伟", + "quote": "Toolso.AI 帮我找到了完美的 AI 写作助手,分类清晰让发现变得非常简单!", + "designation": "内容创作者" + }, + { + "name": "王强", + "quote": "终于有了一个组织良好的 AI 工具目录,节省了我大量的研究时间。", + "designation": "产品经理" + }, + { + "name": "李娜", + "quote": "每周都能在 Toolso.AI 上发现新的 AI 工具,已经成为我探索 AI 的首选资源。", + "designation": "创业者" + }, + { + "name": "陈婷", + "quote": "搜索和筛选功能非常好用,几分钟就找到了我需要的工具。", + "designation": "软件工程师" + }, + { + "name": "赵明", + "quote": "喜欢中英文双语支持!可以轻松探索各种 AI 工具。", + "designation": "数字营销专家" + }, + { + "name": "朱悦", + "quote": "了解最新 AI 工具的好资源,博客板块也很有价值。", + "designation": "AI 研究员" + } + ] + }, + "companies": { + "title": "采用行业领先技术构建", + "subtitle": "基于现代技术栈,被全球顶尖团队信赖" + }, + "gridFeatures": { + "aiReady": { + "title": "可扩展架构", + "description": "模块化设计,轻松添加新功能。遵循 Next.js 最佳实践,便于维护。" + }, + "creem": { + "title": "邮件系统", + "description": "集成 Resend 邮件服务,支持交易邮件、验证邮件和新闻通讯。" + }, + "auth": { + "title": "身份认证", + "description": "Better Auth 提供邮箱密码和 OAuth 支持。会话管理和路由保护已就绪。" + }, + "deploy": { + "title": "一键部署", + "description": "即刻部署到 Vercel、Railway 或任何平台。从第一天起即可投入生产。" + }, + "typescript": { + "title": "TypeScript + Tailwind", + "description": "现代技术栈包括 Next.js 14、TypeScript、Tailwind CSS 和 shadcn/ui 组件。" + }, + "database": { + "title": "数据库 + ORM", + "description": "PostgreSQL 配合 Drizzle ORM。类型安全的查询和迁移已配置。" + }, + "seo": { + "title": "SEO 和营销", + "description": "元标签、Open Graph、站点地图和分析。为有机增长准备的一切。" + }, + "vibeCoding": { + "title": "国际化支持", + "description": "内置中英文支持,使用 next-intl 实现。轻松添加更多语言。" + } + }, + "cta": { + "title": "找到最适合你的 AI 工具", + "description": "浏览精选 AI 工具集合,发现能帮助你提升效率的最佳工具。", + "button": "探索工具" + }, + "auth": { + "login": { + "title": "登录您的账户", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "forgotPassword": "忘记密码?", + "noAccount": "还没有账户?", + "signUpLink": "注册", + "signInButton": "登录", + "signingIn": "登录中...", + "errors": { + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "loginFailed": "登录失败,请重试。", + "googleLoginFailed": "Google 登录失败,请重试。" + } + }, + "signup": { + "title": "注册一个新账户", + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "hasAccount": "已经有账户了?", + "signInLink": "登录", + "signUpButton": "注册", + "signingUp": "注册中...", + "errors": { + "nameRequired": "请输入您的姓名", + "invalidEmail": "请输入有效的邮箱地址", + "emailRequired": "请输入邮箱地址", + "passwordRequired": "请输入密码", + "signupFailed": "注册失败,请重试。", + "googleSignupFailed": "Google 注册失败,请重试。" + } + }, + "social": { + "googleSignIn": "使用 Google 继续", + "or": "或者继续使用", + "githubSignIn": "使用 GitHub 登录" + }, + "checkEmail": { + "title": "请查收您的邮件", + "description": "我们已向您的邮箱发送了验证链接。请点击链接验证您的账户并开始使用。", + "notReceived": "没有收到邮件?", + "checkSpam": "检查垃圾邮件文件夹", + "checkEmailCorrect": "确认输入的邮箱地址是否正确", + "waitAndCheck": "等待几分钟后再次查看", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件发送成功!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "backToLogin": "返回登录", + "securityNote": "为了您的安全,验证链接将在24小时后失效。" + }, + "verifyEmail": { + "verifying": "正在验证邮箱", + "verifyingDescription": "请稍候,我们正在验证您的邮箱地址...", + "success": "邮箱验证成功!", + "successDescription": "您的邮箱已成功验证!正在跳转到登录页面...", + "alreadyVerified": "已验证", + "failed": "验证失败", + "goToLogin": "前往登录", + "backToSignUp": "返回注册", + "requestNew": "重新发送验证邮件", + "checkSpamNote": "如果没有收到邮件,请检查垃圾邮件文件夹" + }, + "emailVerifiedGuard": { + "title": "需要验证邮箱", + "description": "请验证您的邮箱地址以访问此页面。请查收我们发送到以下邮箱的验证链接:", + "resendButton": "重新发送验证邮件", + "resending": "发送中...", + "resendSuccess": "验证邮件已发送!请查收您的邮箱。", + "resendError": "发送验证邮件失败,请重试。", + "signOutLink": "退出并使用其他账户" + } + }, + "Admin": { + "sidebar": { + "title": "管理后台", + "subtitle": "系统管理", + "dashboard": "仪表板", + "tools": "工具管理", + "categories": "分类管理", + "tags": "标签管理", + "users": "用户管理", + "backToDashboard": "返回用户面板", + "submissions": "提交审核", + "claims": "认领审核", + "reviews": "评论审核", + "discovery": "发现管理", + "votes": "投票审计", + "analytics": "数据分析" + }, + "header": { + "welcome": "欢迎", + "adminBadge": "管理员" + }, + "dashboard": { + "title": "管理员仪表板", + "totalUsers": "总用户数", + "activeUsers": "活跃用户", + "recentUsers": "最近注册用户", + "viewAllUsers": "查看所有用户" + }, + "toolsManagement": { + "title": "工具管理", + "totalCount": "共 {count} 个工具", + "searchPlaceholder": "搜索工具名称或 slug...", + "allStatus": "全部状态", + "published": "已发布", + "draft": "草稿", + "addTool": "添加工具", + "tool": "工具", + "slug": "Slug", + "status": "状态", + "createdAt": "创建时间", + "actions": "操作", + "noData": "暂无工具数据", + "previous": "上一页", + "next": "下一页", + "confirmDelete": "确定要删除工具 \"{name}\" 吗?此操作不可恢复。", + "deleted": "工具已删除", + "deleteFailed": "删除失败", + "statusUpdated": "状态已更新", + "statusUpdateFailed": "状态更新失败", + "toDraft": "转为草稿", + "publish": "发布", + "edit": "编辑", + "visitWebsite": "访问网站", + "delete": "删除", + "modal": { + "editTitle": "编辑工具", + "addTitle": "添加工具", + "basicInfo": "基本信息", + "linksAndImages": "链接和图片", + "categories": "分类", + "tags": "标签", + "slug": "Slug", + "status": "状态", + "nameEn": "英文名称", + "nameZh": "中文名称", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "domain": "域名", + "websiteUrl": "网站链接", + "logoUrl": "Logo URL", + "coverImageUrl": "封面图 URL", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTool": "创建工具", + "requiredField": "请填写必填字段", + "updated": "工具已更新", + "created": "工具已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败", + "statusDraft": "草稿", + "statusPublished": "已发布", + "pricing": "定价", + "pricingNone": "未设置", + "pricingFree": "免费", + "pricingFreemium": "免费增值", + "pricingPaid": "付费", + "featured": "首页精选" + } + }, + "categoriesManagement": { + "title": "分类管理", + "addCategory": "添加分类", + "order": "排序", + "category": "分类", + "slug": "Slug", + "toolCount": "工具数", + "toolCountLabel": "{count} 个工具", + "actions": "操作", + "noData": "暂无分类数据", + "edit": "编辑", + "delete": "删除", + "cannotDelete": "该分类下有 {count} 个工具,无法删除", + "confirmDelete": "确定要删除分类 \"{name}\" 吗?", + "deleted": "分类已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑分类", + "addTitle": "添加分类", + "slug": "Slug", + "icon": "图标 (emoji)", + "nameEn": "英文名称", + "nameZh": "中文名称", + "sortOrder": "排序", + "descriptionEn": "英文描述", + "descriptionZh": "中文描述", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createCategory": "创建分类", + "requiredField": "请填写必填字段", + "updated": "分类已更新", + "created": "分类已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "tagsManagement": { + "title": "标签管理", + "searchPlaceholder": "搜索标签...", + "addTag": "添加标签", + "toolCountLabel": "{count} 个工具", + "noData": "暂无标签数据", + "edit": "编辑", + "delete": "删除", + "confirmDeleteWithTools": "该标签被 {count} 个工具使用,删除后这些工具将失去该标签。确定要删除吗?", + "confirmDelete": "确定要删除标签 \"{name}\" 吗?", + "deleted": "标签已删除", + "deleteFailed": "删除失败", + "modal": { + "editTitle": "编辑标签", + "addTitle": "添加标签", + "slug": "Slug", + "nameEn": "英文名称", + "nameZh": "中文名称", + "cancel": "取消", + "saving": "保存中...", + "saveChanges": "保存更改", + "createTag": "创建标签", + "requiredField": "请填写必填字段", + "updated": "标签已更新", + "created": "标签已创建", + "updateFailed": "更新失败", + "createFailed": "创建失败" + } + }, + "users": { + "searchPlaceholder": "搜索用户姓名或邮箱...", + "user": "用户", + "role": "角色", + "status": "状态", + "joined": "加入时间", + "actions": "操作", + "admin": "管理员", + "banned": "已禁用", + "active": "活跃", + "unverified": "未验证", + "edit": "编辑", + "ban": "禁用", + "unban": "解禁", + "viewDetails": "查看详情", + "banReason": "禁用原因", + "banExpires": "禁用到期", + "userDetails": "用户详情", + "name": "姓名", + "email": "邮箱", + "emailVerified": "邮箱验证", + "verified": "已验证", + "lastActive": "最后活跃", + "close": "关闭", + "roleUpdated": "角色已更新", + "roleUpdateFailed": "角色更新失败", + "userBanned": "用户已禁用", + "userUnbanned": "用户已解禁", + "banFailed": "禁用操作失败", + "pagination": { + "previous": "上一页", + "next": "下一页", + "page": "第 {current} / {total} 页" + }, + "cancel": "取消" + } + }, + "dashboard": { + "title": "仪表盘", + "welcome": "欢迎回来", + "cards": { + "personalInfo": { + "title": "个人信息", + "labels": { + "name": "姓名", + "email": "邮箱", + "status": "状态", + "notSet": "未设置" + } + }, + "quickActions": { + "title": "快捷操作", + "editProfile": "编辑个人资料", + "accountSettings": "账户设置", + "securitySettings": "安全设置" + } + }, + "favorites": { + "title": "我的收藏", + "empty": "还没有收藏的工具。", + "browseTools": "去浏览工具并收藏" + } + }, + "profile": { + "title": "个人资料", + "subtitle": "管理您的账户设置和偏好", + "sections": { + "basicInfo": { + "title": "基本信息", + "fullName": "姓名", + "email": "邮箱地址", + "verificationStatus": "验证状态", + "notSet": "未设置", + "nameNotSet": "姓名未设置", + "accountId": "账户 ID" + }, + "accountSettings": { + "title": "账户详情", + "memberSince": "注册于", + "lastLogin": "最近登录", + "accountType": "账户类型" + } + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "请输入您的姓名", + "emailLabel": "邮箱", + "emailPlaceholder": "请输入您的邮箱地址", + "updateButton": "更新资料", + "updating": "更新中...", + "updateSuccess": "个人资料更新成功", + "updateError": "个人资料更新失败" + } + }, + "contact": { + "title": "联系我们", + "subtitle": "我们很乐意倾听您的声音。给我们发送消息,我们会尽快回复。", + "description": "请联系我们,我们会尽快回复。", + "testimonial": { + "title": "帮助用户发现最佳 AI 工具", + "description": "Toolso.AI 致力于为用户提供精选的 AI 工具目录,帮助大家找到最适合的 AI 助手。" + }, + "form": { + "nameLabel": "姓名", + "namePlaceholder": "张三", + "emailLabel": "邮箱地址", + "emailPlaceholder": "hello@example.com", + "companyLabel": "公司", + "companyPlaceholder": "某某科技有限公司", + "messageLabel": "消息", + "messagePlaceholder": "请在此处输入您的消息", + "submitButton": "提交", + "submitting": "发送中...", + "submitSuccess": "消息发送成功!", + "submitError": "消息发送失败,请重试。" + } + }, + "blog": { + "title": "博客", + "subtitle": "来自我们团队的最新见解与更新", + "readMore": "阅读更多", + "minRead": "分钟阅读" + }, + "errors": { + "404": { + "title": "404 - 页面未找到", + "message": "您正在寻找的页面不存在。", + "backHome": "返回首页" + }, + "500": { + "title": "出错了", + "message": "我们遇到了一些技术问题,请稍后重试。", + "backHome": "返回首页" + }, + "general": { + "title": "发生错误", + "message": "发生了一些意外情况,请重试。", + "tryAgain": "重试" + } + }, + "featuredTestimonials": { + "people": [ + { + "name": "张伟", + "designation": "软件工程师" + }, + { + "name": "王强", + "designation": "产品经理" + }, + { + "name": "李娜", + "designation": "数据科学家" + }, + { + "name": "陈婷", + "designation": "UX设计师" + }, + { + "name": "赵明", + "designation": "全栈开发者" + }, + { + "name": "朱悦", + "designation": "独立开发者" + } + ] + }, + "footer": { + "tagline": "发现最好的 AI 工具,提升你的工作效率。", + "product": { + "title": "产品", + "features": "功能", + "documentation": "文档" + }, + "company": { + "title": "公司", + "about": "关于我们", + "blog": "博客", + "careers": "招聘" + }, + "legal": { + "title": "法律", + "privacy": "隐私政策", + "terms": "服务条款", + "cookies": "Cookie 政策" + }, + "social": { + "title": "社交", + "twitter": "Twitter", + "linkedin": "领英", + "github": "GitHub" + }, + "newsletter": { + "title": "订阅邮件", + "description": "获取最新动态和资讯,直接发送到您的邮箱。", + "placeholder": "输入您的邮箱", + "subscribe": "订阅", + "success": "订阅成功!感谢加入。", + "invalidEmail": "请输入有效的邮箱地址。", + "error": "订阅失败,请重试。" + } + }, + "tools": { + "title": "AI 工具库", + "subtitle": "发现最好的 AI 工具,提升您的工作效率", + "searchPlaceholder": "搜索工具...", + "all": "全部", + "foundTools": "共找到 {count} 个工具", + "visitWebsite": "访问网站", + "noTools": "暂无工具", + "backToTools": "返回工具列表", + "about": "介绍", + "categories": "分类", + "tags": "标签", + "visitButton": "访问网站", + "toolInfo": "工具信息", + "domain": "域名", + "added": "添加时间", + "notFound": "工具未找到", + "favorites": { + "add": "收藏", + "remove": "取消收藏", + "loginRequired": "请先登录后再收藏", + "error": "操作失败,请重试。" + }, + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费" + }, + "categoryPage": { + "viewAll": "查看该分类全部 {count} 个工具" + }, + "reviewCta": "评分与评论来自已验证的社区用户,每条评论旁展示“有用”计数。", + "alternatives": "替代品", + "seeAllAlternatives": "查看全部替代品", + "stats": { + "votes": "票数", + "views": "浏览量" + }, + "share": { + "share": "分享", + "copy": "复制", + "copyLink": "复制链接", + "copied": "链接已复制" + }, + "sort": { + "latest": "最新", + "trending": "最热" + } + }, + "seo": { + "home": { + "title": "The AI Ledger — AI 工具评测与排名", + "description": "独立 AI 媒体:深度指南、横向对比,以及由社区排名的 AI 工具目录。", + "ogImage": "https://toolso.ai/banner.png" + }, + "blog": { + "title": "博客 - Toolso.AI", + "description": "关于 AI 工具的最新资讯、教程和更新。了解最佳 AI 工具和行业趋势。", + "ogImage": "https://toolso.ai/banner.png" + }, + "contact": { + "title": "联系我们 - Toolso.AI", + "description": "与我们取得联系。我们期待听到您的反馈和工具推荐建议。", + "ogImage": "https://toolso.ai/banner.png" + }, + "login": { + "title": "登录 - Toolso.AI", + "description": "登录您的账户,提交工具、收藏喜爱的工具,为 AI 工具目录做贡献。", + "ogImage": "https://toolso.ai/banner.png" + }, + "signup": { + "title": "注册 - Toolso.AI", + "description": "创建您的账户,开始为 AI 工具目录做贡献。提交工具、加入我们的社区。", + "ogImage": "https://toolso.ai/banner.png" + }, + "terms": { + "title": "服务条款 - Toolso.AI", + "description": "阅读我们的服务条款,了解使用 Toolso.AI 的规则和指南。", + "ogImage": "https://toolso.ai/banner.png" + }, + "privacy": { + "title": "隐私政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上收集、使用和保护您的个人信息和数据。", + "ogImage": "https://toolso.ai/banner.png" + }, + "cookies": { + "title": "Cookie 政策 - Toolso.AI", + "description": "了解我们如何在 Toolso.AI 上使用 cookies 和类似的跟踪技术。", + "ogImage": "https://toolso.ai/banner.png" + }, + "tools": { + "title": "AI 工具库 - 发现最好的 AI 工具", + "description": "浏览精选的 AI 工具集合。找到提升效率、激发创意的最佳 AI 工具。" + } + }, + "featuredTools": { + "title": "精选工具", + "subtitle": "精选优质 AI 工具,助力提升工作效率", + "visitWebsite": "访问网站", + "empty": "暂无工具,请先在后台添加", + "viewAll": "查看全部工具" + }, + "voting": { + "vote": "投票", + "voted": "已投", + "unvote": "取消投票", + "loginRequired": "投票需要先登录,登录后会自动回到本页。", + "rateLimited": "操作太快了,请稍后再试。", + "error": "投票失败,请重试。" + }, + "reviews": { + "title": "用户评论", + "writeReview": "写评论", + "empty": "还没有评论——来分享你的使用体验吧。", + "loadMore": "加载更多", + "loading": "加载中...", + "helpful": "有用", + "verifiedUser": "已验证用户", + "pros": "优点", + "cons": "缺点", + "yourRating": "你的评分", + "ratingRequired": "请先选择星级评分。", + "titlePlaceholder": "一句话总结(可选)", + "contentPlaceholder": "你用它做什么?效果如何?", + "prosPlaceholder": "它哪里做得好?", + "consPlaceholder": "哪里还可以改进?", + "useCasePlaceholder": "你的使用场景(如 社媒内容创作)", + "saving": "保存中...", + "submit": "发布评论", + "update": "更新评论", + "cancel": "取消", + "delete": "删除我的评论", + "deleted": "评论已删除", + "tooShort": "评论有点短——至少写一句话吧。", + "error": "评论保存失败,请重试。", + "basedOn": "共 {count} 条评论" + }, + "submission": { + "name": "工具名称", + "websiteUrl": "官网地址", + "tagline": "一句话简介", + "taglinePlaceholder": "展示在卡片上的一句话卖点", + "description": "详细介绍", + "descriptionPlaceholder": "它是做什么的?适合谁?有什么不同?", + "logoUrl": "Logo 地址", + "category": "分类", + "pricingLabel": "定价模式", + "pricing": { + "free": "免费", + "freemium": "免费增值", + "paid": "付费", + "freeTrial": "免费试用", + "openSource": "开源", + "contact": "联系定价" + }, + "founderName": "创始人 / 公司", + "contactEmail": "联系邮箱", + "socialLinks": "社交链接", + "note": "给编辑的备注", + "notePlaceholder": "任何能加快审核的信息(上线时间、数据等)", + "selectPlaceholder": "请选择...", + "submit": "提交审核", + "submitting": "提交中...", + "submitted": "已提交!我们会在 48 小时内完成审核。", + "reviewNote": "免费收录 · 48 小时内审核", + "duplicateFound": "这个工具可能已经被收录:", + "duplicateBlocked": "该工具似乎已被收录,不允许重复提交。", + "error": "提交失败,请检查填写内容。" + }, + "claim": { + "claimThisTool": "认领此工具", + "verifiedOwner": "已认证所有者", + "formTitle": "认领该收录页的所有权", + "rolePlaceholder": "你的身份(如 创始人、市场负责人)", + "messagePlaceholder": "我们如何验证你的身份?(同域名邮箱、官方报道页等)", + "proofPlaceholder": "证明链接(可选)", + "submit": "发送认领申请", + "submitting": "发送中...", + "submitted": "认领申请已发送,我们会尽快审核。", + "pendingExists": "你已有一条待审核的认领申请。", + "cancel": "取消", + "error": "认领申请发送失败。" + }, + "rankings": { + "title": "社区榜单", + "subtitle": "七个实时榜单由投票、评论、收藏与互动数据驱动——不接受赞助排名。", + "trending": "趋势榜", + "popular": "热门榜", + "mostVoted": "最多投票", + "mostSaved": "最多收藏", + "highestRated": "最高评分", + "new": "最新收录", + "editorsChoice": "编辑精选", + "empty": "该榜单暂无工具。" + } +} diff --git a/sites/the-ai-ledger/next.config.mjs b/sites/the-ai-ledger/next.config.mjs new file mode 100644 index 0000000..84f2b3e --- /dev/null +++ b/sites/the-ai-ledger/next.config.mjs @@ -0,0 +1,5 @@ +import createSiteConfig from "@aidir/core/next-config"; + +export default createSiteConfig({ + requestPath: "./src/i18n/request.ts", +}); diff --git a/sites/the-ai-ledger/package.json b/sites/the-ai-ledger/package.json new file mode 100644 index 0000000..57ef291 --- /dev/null +++ b/sites/the-ai-ledger/package.json @@ -0,0 +1,34 @@ +{ + "name": "site-the-ai-ledger", + "version": "1.0.0", + "description": "The AI Ledger — AI directory site powered by @aidir/core", + "private": true, + "scripts": { + "dev": "next dev -p 3003", + "build": "next build", + "start": "next start -p 3003", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@aidir/core": "workspace:*", + "next": "16.1.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "next-intl": "^4.7.0", + "next-themes": "^0.4.6", + "next-view-transitions": "^0.3.5", + "sonner": "^2.0.7", + "geist": "^1.3.0", + "lucide-react": "^0.562.0", + "framer-motion": "^12.43.0" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@types/mdx": "^2.0.13", + "typescript": "^5", + "tailwindcss": "^3.4.1", + "postcss": "^8" + } +} diff --git a/sites/the-ai-ledger/postcss.config.mjs b/sites/the-ai-ledger/postcss.config.mjs new file mode 100644 index 0000000..a06f589 --- /dev/null +++ b/sites/the-ai-ledger/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/sites/the-ai-ledger/public/avatar.jpeg b/sites/the-ai-ledger/public/avatar.jpeg new file mode 100644 index 0000000..5f84d25 Binary files /dev/null and b/sites/the-ai-ledger/public/avatar.jpeg differ diff --git a/sites/the-ai-ledger/public/banner.png b/sites/the-ai-ledger/public/banner.png new file mode 100644 index 0000000..1913b5c Binary files /dev/null and b/sites/the-ai-ledger/public/banner.png differ diff --git a/sites/the-ai-ledger/public/icon-192.png b/sites/the-ai-ledger/public/icon-192.png new file mode 100644 index 0000000..7c35646 Binary files /dev/null and b/sites/the-ai-ledger/public/icon-192.png differ diff --git a/sites/the-ai-ledger/public/icon-512.png b/sites/the-ai-ledger/public/icon-512.png new file mode 100644 index 0000000..9dcae12 Binary files /dev/null and b/sites/the-ai-ledger/public/icon-512.png differ diff --git a/sites/the-ai-ledger/public/icon.svg b/sites/the-ai-ledger/public/icon.svg new file mode 100644 index 0000000..996667b --- /dev/null +++ b/sites/the-ai-ledger/public/icon.svg @@ -0,0 +1 @@ +T diff --git a/sites/the-ai-ledger/public/noise.webp b/sites/the-ai-ledger/public/noise.webp new file mode 100644 index 0000000..8349904 Binary files /dev/null and b/sites/the-ai-ledger/public/noise.webp differ diff --git a/sites/the-ai-ledger/public/og-image.png b/sites/the-ai-ledger/public/og-image.png new file mode 100644 index 0000000..6962af5 Binary files /dev/null and b/sites/the-ai-ledger/public/og-image.png differ diff --git a/sites/the-ai-ledger/public/robots.txt b/sites/the-ai-ledger/public/robots.txt new file mode 100644 index 0000000..9f21055 --- /dev/null +++ b/sites/the-ai-ledger/public/robots.txt @@ -0,0 +1,24 @@ +# robots.txt for Toolso.AI - AI Tools Directory +# https://toolso.ai + +User-agent: * +Allow: / + +# Disallow admin and API pages +Disallow: /admin/ +Disallow: /api/ + +# Disallow authentication pages +Disallow: /*/signup +Disallow: /*/login +Disallow: /*/check-email +Disallow: /*/verify-email +Disallow: /*/forgot-password +Disallow: /*/reset-password + +# Disallow protected user pages +Disallow: /*/dashboard +Disallow: /*/profile + +# Sitemap location +Sitemap: https://toolso.ai/sitemap.xml diff --git a/sites/the-ai-ledger/public/skeleton-one.png b/sites/the-ai-ledger/public/skeleton-one.png new file mode 100644 index 0000000..9734078 Binary files /dev/null and b/sites/the-ai-ledger/public/skeleton-one.png differ diff --git a/sites/the-ai-ledger/public/tyler.jpeg b/sites/the-ai-ledger/public/tyler.jpeg new file mode 100644 index 0000000..667f0dc Binary files /dev/null and b/sites/the-ai-ledger/public/tyler.jpeg differ diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/analytics/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/analytics/page.tsx new file mode 100644 index 0000000..0586ba2 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/analytics/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/analytics/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/analytics/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/categories/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/categories/page.tsx new file mode 100644 index 0000000..4b50d6c --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/categories/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/categories/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/categories/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/claims/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/claims/page.tsx new file mode 100644 index 0000000..a3fe61d --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/claims/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/claims/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/claims/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/discovery/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/discovery/page.tsx new file mode 100644 index 0000000..bb70237 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/discovery/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/discovery/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/discovery/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/page.tsx new file mode 100644 index 0000000..df0a27b --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/reviews/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/reviews/page.tsx new file mode 100644 index 0000000..a42f9ac --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/reviews/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/reviews/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/reviews/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/submissions/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/submissions/page.tsx new file mode 100644 index 0000000..7ff5ca4 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/submissions/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/submissions/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/submissions/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/tags/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/tags/page.tsx new file mode 100644 index 0000000..516f034 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/tags/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tags/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tags/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/tools/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/tools/page.tsx new file mode 100644 index 0000000..364ce24 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/tools/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/tools/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/users/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/users/page.tsx new file mode 100644 index 0000000..f6c4ba4 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/users/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/admin/users/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/users/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/votes/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/votes/page.tsx new file mode 100644 index 0000000..32fd76c --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/admin/votes/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(admin)/admin/votes/page.tsx 的薄路由 +export const revalidate = 0; +export { default } from "@aidir/core/pages/[locale]/(admin)/admin/votes/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(admin)/layout.tsx b/sites/the-ai-ledger/src/app/[locale]/(admin)/layout.tsx new file mode 100644 index 0000000..d58cb83 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(admin)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(admin)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(admin)/layout"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(auth)/forgot-password/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(auth)/forgot-password/page.tsx new file mode 100644 index 0000000..737bb95 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(auth)/forgot-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/forgot-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/forgot-password/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(auth)/layout.tsx b/sites/the-ai-ledger/src/app/[locale]/(auth)/layout.tsx new file mode 100644 index 0000000..2d015d0 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(auth)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/layout"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(auth)/login/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(auth)/login/page.tsx new file mode 100644 index 0000000..524b156 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(auth)/login/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/login/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/login/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(auth)/reset-password/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(auth)/reset-password/page.tsx new file mode 100644 index 0000000..69c68f4 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(auth)/reset-password/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/reset-password/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(auth)/reset-password/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(auth)/signup/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(auth)/signup/page.tsx new file mode 100644 index 0000000..414f955 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(auth)/signup/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(auth)/signup/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(auth)/signup/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx new file mode 100644 index 0000000..1e24e74 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/ai-tools-for/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/[slug]/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/ai-tools-for/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/ai-tools-for/page.tsx new file mode 100644 index 0000000..e17e80b --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/ai-tools-for/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/ai-tools-for/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/ai-tools-for/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/best/[slug]/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/best/[slug]/page.tsx new file mode 100644 index 0000000..a4f396b --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/best/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/[slug]/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/best/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/best/page.tsx new file mode 100644 index 0000000..af741b7 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/best/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/best/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/best/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/blog/[slug]/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/blog/[slug]/page.tsx new file mode 100644 index 0000000..ddcaf5c --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/blog/[slug]/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/[slug]/page.tsx 的薄路由 +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/[slug]/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/blog/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/blog/page.tsx new file mode 100644 index 0000000..e0aaa51 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/blog/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/blog/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/blog/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/category/[slug]/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/category/[slug]/page.tsx new file mode 100644 index 0000000..67bc8b7 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/category/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/category/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/category/[slug]/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/contact/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/contact/page.tsx new file mode 100644 index 0000000..38cf0af --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/contact/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/contact/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/contact/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/cookies/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/cookies/page.tsx new file mode 100644 index 0000000..6e27f11 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/cookies/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/cookies/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/cookies/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/layout.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/layout.tsx new file mode 100644 index 0000000..0602321 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/layout.tsx @@ -0,0 +1,4 @@ +import { createMarketingLayout } from "@aidir/core/kit/create-marketing-layout"; +import { siteConfig } from "@/site/brand"; + +export default createMarketingLayout(siteConfig); diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/page.tsx new file mode 100644 index 0000000..0afcbb9 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/page.tsx @@ -0,0 +1,9 @@ +import { createHomePage, createHomeMetadata } from "@aidir/core/kit/create-home"; +import { siteConfig } from "@/site/brand"; +import { SiteHome } from "@/site/home"; + +// 首页内容变化不频繁,ISR 每小时再生 +export const revalidate = 3600; + +export const generateMetadata = createHomeMetadata(siteConfig); +export default createHomePage(siteConfig, SiteHome); diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/privacy/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/privacy/page.tsx new file mode 100644 index 0000000..ab85a20 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/privacy/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/privacy/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/privacy/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/rankings/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/rankings/page.tsx new file mode 100644 index 0000000..1b7854c --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/rankings/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/rankings/page.tsx 的薄路由 +export const revalidate = 1800; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/rankings/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/submit/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/submit/page.tsx new file mode 100644 index 0000000..5cd1d96 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/submit/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/submit/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/submit/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/terms/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/terms/page.tsx new file mode 100644 index 0000000..588ebc3 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/terms/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/terms/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/terms/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/tools/[slug]/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/tools/[slug]/page.tsx new file mode 100644 index 0000000..c88bbd2 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/tools/[slug]/page.tsx @@ -0,0 +1,3 @@ +// 自动生成:[locale]/(marketing)/tools/[slug]/page.tsx 的薄路由 +export const revalidate = 3600; +export { default, generateStaticParams, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/[slug]/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(marketing)/tools/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(marketing)/tools/page.tsx new file mode 100644 index 0000000..ef24d90 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(marketing)/tools/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(marketing)/tools/page.tsx 的薄路由 +export { default, generateMetadata } from "@aidir/core/pages/[locale]/(marketing)/tools/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(protected)/dashboard/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(protected)/dashboard/page.tsx new file mode 100644 index 0000000..20940ed --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(protected)/dashboard/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/dashboard/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/dashboard/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(protected)/layout.tsx b/sites/the-ai-ledger/src/app/[locale]/(protected)/layout.tsx new file mode 100644 index 0000000..9e15378 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(protected)/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/layout.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/layout"; diff --git a/sites/the-ai-ledger/src/app/[locale]/(protected)/profile/page.tsx b/sites/the-ai-ledger/src/app/[locale]/(protected)/profile/page.tsx new file mode 100644 index 0000000..cf5ba66 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/(protected)/profile/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/(protected)/profile/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/(protected)/profile/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/check-email/page.tsx b/sites/the-ai-ledger/src/app/[locale]/check-email/page.tsx new file mode 100644 index 0000000..0cf4d63 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/check-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/check-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/check-email/page"; diff --git a/sites/the-ai-ledger/src/app/[locale]/layout.tsx b/sites/the-ai-ledger/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..5141337 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/layout.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/layout.tsx 的薄路由 +export { default, generateStaticParams } from "@aidir/core/pages/[locale]/layout"; diff --git a/sites/the-ai-ledger/src/app/[locale]/verify-email/page.tsx b/sites/the-ai-ledger/src/app/[locale]/verify-email/page.tsx new file mode 100644 index 0000000..28f07f2 --- /dev/null +++ b/sites/the-ai-ledger/src/app/[locale]/verify-email/page.tsx @@ -0,0 +1,2 @@ +// 自动生成:[locale]/verify-email/page.tsx 的薄路由 +export { default } from "@aidir/core/pages/[locale]/verify-email/page"; diff --git a/sites/the-ai-ledger/src/app/api/auth/[...all]/route.ts b/sites/the-ai-ledger/src/app/api/auth/[...all]/route.ts new file mode 100644 index 0000000..3ad325b --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/auth/[...all]/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/[...all]/route.ts 的薄路由 +export { POST, GET } from "@aidir/core/pages/api/auth/[...all]/route"; diff --git a/sites/the-ai-ledger/src/app/api/auth/forgot-password/route.ts b/sites/the-ai-ledger/src/app/api/auth/forgot-password/route.ts new file mode 100644 index 0000000..04090fd --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/auth/forgot-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/forgot-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/forgot-password/route"; diff --git a/sites/the-ai-ledger/src/app/api/auth/resend-verification/route.ts b/sites/the-ai-ledger/src/app/api/auth/resend-verification/route.ts new file mode 100644 index 0000000..4e8ce70 --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/auth/resend-verification/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/resend-verification/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/resend-verification/route"; diff --git a/sites/the-ai-ledger/src/app/api/auth/reset-password/route.ts b/sites/the-ai-ledger/src/app/api/auth/reset-password/route.ts new file mode 100644 index 0000000..652eba4 --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/auth/reset-password/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/reset-password/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/auth/reset-password/route"; diff --git a/sites/the-ai-ledger/src/app/api/auth/verify-email/route.ts b/sites/the-ai-ledger/src/app/api/auth/verify-email/route.ts new file mode 100644 index 0000000..c658aab --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/auth/verify-email/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-email/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-email/route"; diff --git a/sites/the-ai-ledger/src/app/api/auth/verify-reset-token/route.ts b/sites/the-ai-ledger/src/app/api/auth/verify-reset-token/route.ts new file mode 100644 index 0000000..02b6c76 --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/auth/verify-reset-token/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/auth/verify-reset-token/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/auth/verify-reset-token/route"; diff --git a/sites/the-ai-ledger/src/app/api/newsletter/unsubscribe/route.ts b/sites/the-ai-ledger/src/app/api/newsletter/unsubscribe/route.ts new file mode 100644 index 0000000..5bee9b9 --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/newsletter/unsubscribe/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/newsletter/unsubscribe/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/newsletter/unsubscribe/route"; diff --git a/sites/the-ai-ledger/src/app/api/outbound/route.ts b/sites/the-ai-ledger/src/app/api/outbound/route.ts new file mode 100644 index 0000000..fa3a252 --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/outbound/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/outbound/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/outbound/route"; diff --git a/sites/the-ai-ledger/src/app/api/search/route.ts b/sites/the-ai-ledger/src/app/api/search/route.ts new file mode 100644 index 0000000..d3f1006 --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/search/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/search/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/search/route"; diff --git a/sites/the-ai-ledger/src/app/api/tools/[id]/vote/route.ts b/sites/the-ai-ledger/src/app/api/tools/[id]/vote/route.ts new file mode 100644 index 0000000..56e4b5f --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/tools/[id]/vote/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/tools/[id]/vote/route.ts 的薄路由 +export { POST, DELETE } from "@aidir/core/pages/api/tools/[id]/vote/route"; diff --git a/sites/the-ai-ledger/src/app/api/upload/image/route.ts b/sites/the-ai-ledger/src/app/api/upload/image/route.ts new file mode 100644 index 0000000..bce8a93 --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/upload/image/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/image/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/image/route"; diff --git a/sites/the-ai-ledger/src/app/api/upload/simple/route.ts b/sites/the-ai-ledger/src/app/api/upload/simple/route.ts new file mode 100644 index 0000000..665aa2b --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/upload/simple/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/upload/simple/route.ts 的薄路由 +export { POST } from "@aidir/core/pages/api/upload/simple/route"; diff --git a/sites/the-ai-ledger/src/app/api/user/admin-status/route.ts b/sites/the-ai-ledger/src/app/api/user/admin-status/route.ts new file mode 100644 index 0000000..46244da --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/user/admin-status/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/admin-status/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/admin-status/route"; diff --git a/sites/the-ai-ledger/src/app/api/user/profile/route.ts b/sites/the-ai-ledger/src/app/api/user/profile/route.ts new file mode 100644 index 0000000..3ddc7ff --- /dev/null +++ b/sites/the-ai-ledger/src/app/api/user/profile/route.ts @@ -0,0 +1,2 @@ +// 自动生成:api/user/profile/route.ts 的薄路由 +export { GET } from "@aidir/core/pages/api/user/profile/route"; diff --git a/sites/the-ai-ledger/src/app/layout.tsx b/sites/the-ai-ledger/src/app/layout.tsx new file mode 100644 index 0000000..01115cc --- /dev/null +++ b/sites/the-ai-ledger/src/app/layout.tsx @@ -0,0 +1,3 @@ +import "@aidir/core/styles/globals.css"; + +export { default } from "@aidir/core/pages/app-layout"; diff --git a/sites/the-ai-ledger/src/app/manifest.ts b/sites/the-ai-ledger/src/app/manifest.ts new file mode 100644 index 0000000..c7fc70b --- /dev/null +++ b/sites/the-ai-ledger/src/app/manifest.ts @@ -0,0 +1,2 @@ +// 自动生成:manifest.ts 的薄路由 +export { default } from "@aidir/core/pages/manifest"; diff --git a/sites/the-ai-ledger/src/app/not-found.tsx b/sites/the-ai-ledger/src/app/not-found.tsx new file mode 100644 index 0000000..cb56be7 --- /dev/null +++ b/sites/the-ai-ledger/src/app/not-found.tsx @@ -0,0 +1,2 @@ +// 自动生成:not-found.tsx 的薄路由 +export { default } from "@aidir/core/pages/not-found"; diff --git a/sites/the-ai-ledger/src/app/sitemap.ts b/sites/the-ai-ledger/src/app/sitemap.ts new file mode 100644 index 0000000..c773151 --- /dev/null +++ b/sites/the-ai-ledger/src/app/sitemap.ts @@ -0,0 +1,2 @@ +// 自动生成:sitemap.ts 的薄路由 +export { default } from "@aidir/core/pages/sitemap"; diff --git a/sites/the-ai-ledger/src/i18n/request.ts b/sites/the-ai-ledger/src/i18n/request.ts new file mode 100644 index 0000000..bffb5c2 --- /dev/null +++ b/sites/the-ai-ledger/src/i18n/request.ts @@ -0,0 +1,37 @@ +import { getRequestConfig } from "next-intl/server"; +import { notFound } from "next/navigation"; +import { locales, defaultLocale, type Locale } from "@aidir/core/i18n.config"; + +/** 站点品牌 SEO 文案覆盖(每个网站不同) */ +const brandMessages = { + en: { + seo: { home: {"title":"The AI Ledger — AI Tools, Reviewed and Ranked","description":"Independent journalism on AI: buying guides, comparisons and a community-ranked directory of the best AI tools.","ogImage":"/og-image.png"} }, + hero: { title: "The AI Ledger — AI Tools, Reviewed and Ranked", description: "Independent journalism on AI: buying guides, comparisons and a community-ranked directory of the best AI tools." }, + common: { brand: { name: "The AI Ledger", tagline: "Independent journalism on AI tools, with a community-ranked directory." } }, + }, + zh: { + seo: { home: {"title":"The AI Ledger — AI 工具评测与排名","description":"独立 AI 媒体:深度指南、横向对比,以及由社区排名的 AI 工具目录。","ogImage":"/og-image.png"} }, + hero: { title: "The AI Ledger — AI 工具评测与排名", description: "独立 AI 媒体:深度指南、横向对比,以及由社区排名的 AI 工具目录。" }, + common: { brand: { name: "The AI Ledger", tagline: "Independent journalism on AI tools, with a community-ranked directory." } }, + }, +} as const; + +export default getRequestConfig(async ({ requestLocale }) => { + let locale = await requestLocale; + if (!locale || !locales.includes(locale as Locale)) { + locale = defaultLocale; + } + try { + // 底座基础文案 + 站点品牌覆盖(浅合并到顶层命名空间) + const base = (await import(`../../messages/${locale}.json`)).default; + const override = brandMessages[locale as keyof typeof brandMessages]; + const messages = { ...base }; + for (const [ns, value] of Object.entries(override)) { + messages[ns] = { ...(messages[ns] ?? {}), ...value }; + } + return { locale, messages }; + } catch (error) { + console.error("Error loading messages for locale:", locale, error); + notFound(); + } +}); diff --git a/sites/the-ai-ledger/src/proxy.ts b/sites/the-ai-ledger/src/proxy.ts new file mode 100644 index 0000000..eec3c1e --- /dev/null +++ b/sites/the-ai-ledger/src/proxy.ts @@ -0,0 +1,10 @@ +import { proxy } from "@aidir/core/proxy"; + +export default proxy; + +export const config = { + matcher: [ + "/", + "/((?!api|_next|_vercel|.*\\..*).*)" + ] +}; diff --git a/sites/the-ai-ledger/src/site/brand.tsx b/sites/the-ai-ledger/src/site/brand.tsx new file mode 100644 index 0000000..09b3dee --- /dev/null +++ b/sites/the-ai-ledger/src/site/brand.tsx @@ -0,0 +1,103 @@ +import type { SiteConfig } from "@/kit/types"; + +// The AI Ledger —— 独立站点的全部品牌/导航/页脚配置 +export const siteConfig: SiteConfig = { + "port": 3003, + "brand": { + "name": "The AI Ledger", + "tagline": "Independent journalism on AI tools, with a community-ranked directory.", + "headline": "AI tools, reviewed and ranked", + "subheadline": "Guides, comparisons and a community-powered directory of the best AI tools." + }, + "navItems": [ + { + "label": "Stories", + "href": "/blog" + }, + { + "label": "Guides", + "href": "/ai-tools-for" + }, + { + "label": "Best Picks", + "href": "/best" + }, + { + "label": "Directory", + "href": "/tools" + }, + { + "label": "Rankings", + "href": "/rankings" + }, + { + "label": "Submit", + "href": "/submit" + } + ], + "footerGroups": [ + { + "title": "Read", + "links": [ + { + "label": "Latest Stories", + "href": "/blog" + }, + { + "label": "Buying Guides", + "href": "/best" + }, + { + "label": "Use Case Guides", + "href": "/ai-tools-for" + } + ] + }, + { + "title": "Directory", + "links": [ + { + "label": "All Tools", + "href": "/tools" + }, + { + "label": "Community Rankings", + "href": "/rankings" + }, + { + "label": "Submit a Tool", + "href": "/submit" + } + ] + }, + { + "title": "Company", + "links": [ + { + "label": "Contact", + "href": "/contact" + }, + { + "label": "Terms", + "href": "/terms" + }, + { + "label": "Privacy", + "href": "/privacy" + } + ] + } + ], + "searchPlaceholder": "Search the directory...", + "seo": { + "en": { + "title": "The AI Ledger — AI Tools, Reviewed and Ranked", + "description": "Independent journalism on AI: buying guides, comparisons and a community-ranked directory of the best AI tools." + }, + "zh": { + "title": "The AI Ledger — AI 工具评测与排名", + "description": "独立 AI 媒体:深度指南、横向对比,以及由社区排名的 AI 工具目录。" + } + }, + "id": "the-ai-ledger" +}; diff --git a/sites/the-ai-ledger/src/site/home.tsx b/sites/the-ai-ledger/src/site/home.tsx new file mode 100644 index 0000000..ec9bfee --- /dev/null +++ b/sites/the-ai-ledger/src/site/home.tsx @@ -0,0 +1,222 @@ +// 自动生成:站点首页组件(源自底座 editorial 形态,品牌来自 @/site/brand) +import { siteConfig } from "@/site/brand"; +import { BookOpen, PenTool, ArrowRight, Star } from "lucide-react"; +import { LocaleLink } from "@/components/locale-link"; +import { SectionHeader } from "@/kit/section"; +import { getHomeDataSafe } from "@/kit/home-data"; + +/** Editorial:AI 媒体 + 工具目录(Serif / 内容优先) */ + + +const navItems = [ + { label: "Stories", href: "/blog" }, + { label: "Guides", href: "/ai-tools-for" }, + { label: "Best Picks", href: "/best" }, + { label: "Directory", href: "/tools" }, + { label: "Rankings", href: "/rankings" }, + { label: "Submit", href: "/submit" }, +]; + +const footerGroups = [ + { + title: "Read", + links: [ + { label: "Latest Stories", href: "/blog" }, + { label: "Buying Guides", href: "/best" }, + { label: "Use Case Guides", href: "/ai-tools-for" }, + ], + }, + { + title: "Directory", + links: [ + { label: "All Tools", href: "/tools" }, + { label: "Community Rankings", href: "/rankings" }, + { label: "Submit a Tool", href: "/submit" }, + ], + }, + { + title: "Company", + links: [ + { label: "Contact", href: "/contact" }, + { label: "Terms", href: "/terms" }, + { label: "Privacy", href: "/privacy" }, + ], + }, +]; + +async function SiteHome({ locale }: { locale: string }) { + const data = await getHomeDataSafe(6); + const featured = data.articles[0]; + const editorPicks = data.editorsChoice.slice(0, 4); + + return ( +
+ {/* Masthead */} +
+
+

+ Independent AI Coverage +

+

+ {siteConfig.brand.headline} +

+

+ {siteConfig.brand.subheadline} +

+
+
+ +
+ {/* Featured Story */} + {featured && ( +
+
+ + Featured story +
+ +

+ {featured.title} +

+ {featured.description && ( +

+ {featured.description} +

+ )} + + Read the story + + +
+
+ )} + + {/* Editor's Picks */} + {editorPicks.length > 0 && ( +
+
+ + Editor's picks +
+
+ {editorPicks.map((tool, i) => ( + + + {String(i + 1).padStart(2, "0")} + +
+

+ {locale === "zh" && tool.nameZh ? tool.nameZh : tool.nameEn} +

+

+ {tool.taglineEn || tool.descriptionEn} +

+
+ {(tool.ratingAvg ?? 0) > 0 && ( + + + {(tool.ratingAvg ?? 0).toFixed(1)} + + )} +
+ ))} +
+
+ )} + + {/* Best Lists(编辑内容型榜单) */} + {data.collections.length > 0 && ( +
+ +
+ {data.collections.slice(0, 4).map((col) => ( + +

+ {locale === "zh" && col.nameZh ? col.nameZh : col.nameEn} +

+

+ {locale === "zh" && col.introZh ? col.introZh : col.introEn} +

+

+ {col.toolCount} tools compared +

+
+ ))} +
+
+ )} + + {/* Latest articles */} + {data.articles.length > 1 && ( +
+ +
+ {data.articles.slice(1).map((article) => ( + +

+ {article.title} +

+ {article.description && ( +

+ {article.description} +

+ )} +
+ ))} +
+
+ )} + + {/* Community signal */} + {data.latestReviews.length > 0 && ( +
+ +
+ {data.latestReviews.slice(0, 4).map((review, i) => ( +
+

+ "{review.content.slice(0, 140)} + {review.content.length > 140 ? "..." : ""}" +

+
+ {review.authorName} on{" "} + + {review.toolName} + + {" · "} + {review.rating}/5 +
+
+ ))} +
+
+ )} +
+
+ ); +} + +export { SiteHome }; diff --git a/sites/the-ai-ledger/tailwind.config.ts b/sites/the-ai-ledger/tailwind.config.ts new file mode 100644 index 0000000..c4729ec --- /dev/null +++ b/sites/the-ai-ledger/tailwind.config.ts @@ -0,0 +1,11 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./src/**/*.{js,ts,jsx,tsx,mdx}", + "../../packages/core/src/**/*.{js,ts,jsx,tsx,mdx}", + ], + presets: [require("../../packages/core/tailwind.preset.cjs")], +}; + +export default config; diff --git a/sites/the-ai-ledger/tsconfig.json b/sites/the-ai-ledger/tsconfig.json new file mode 100644 index 0000000..95fd293 --- /dev/null +++ b/sites/the-ai-ledger/tsconfig.json @@ -0,0 +1,64 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./src/*", + "../../packages/core/src/*" + ], + "@aidir/core/pages/*": [ + "../../packages/core/src/pages/*" + ], + "@aidir/core/kit/*": [ + "../../packages/core/src/kit/*" + ], + "@aidir/core/src/*": [ + "../../packages/core/src/*" + ], + "@aidir/core/proxy": [ + "../../packages/core/src/proxy.ts" + ], + "@aidir/core/i18n.config": [ + "../../packages/core/src/i18n.config.ts" + ], + "@aidir/core/styles/globals.css": [ + "../../packages/core/src/styles/globals.css" + ], + "@aidir/core/*": [ + "../../packages/core/src/*", + "../../packages/core/*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/src/app/[locale]/(marketing)/layout.tsx b/src/app/[locale]/(marketing)/layout.tsx deleted file mode 100644 index 408f33f..0000000 --- a/src/app/[locale]/(marketing)/layout.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import type { Metadata } from "next"; -import { ThemeChrome } from "@/themes/chrome"; -import { getTranslations } from 'next-intl/server'; -import type { Locale } from "@/i18n.config"; - -export async function generateMetadata({ - params -}: { - params: Promise<{ locale: Locale }> -}): Promise { - const { locale } = await params; - const t = await getTranslations({ locale, namespace: 'seo' }); - - return { - title: t('home.title'), - description: t('home.description'), - openGraph: { - images: [t('home.ogImage')], - }, - }; -} - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( -
- - {children} - -
- ); -} diff --git a/src/app/[locale]/(marketing)/page.tsx b/src/app/[locale]/(marketing)/page.tsx deleted file mode 100644 index 57a0624..0000000 --- a/src/app/[locale]/(marketing)/page.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { WebSiteJsonLd, OrganizationJsonLd } from "@/components/json-ld"; -import { Metadata } from "next"; -import { getTranslations, setRequestLocale } from 'next-intl/server'; -import type { Locale } from "@/i18n.config"; -import { generatePageMetadata } from "@/lib/metadata"; -import { getActiveTheme } from "@/themes/registry"; - -export async function generateMetadata({ - params -}: { - params: Promise<{ locale: Locale }>; -}): Promise { - const { locale } = await params; - const t = await getTranslations({ locale, namespace: 'hero' }); - - return generatePageMetadata({ - locale, - path: '', - title: t('title'), - description: t('description'), - }); -} - -// 首页内容变化不频繁,ISR 每小时再生 -export const revalidate = 3600; - -export default async function Home({ - params, -}: { - params: Promise<{ locale: Locale }>; -}) { - const { locale } = await params; - setRequestLocale(locale); - const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3001'; - const theme = getActiveTheme(); - const ThemeHomePage = theme.HomePage; - - return ( -
- {/* Structured Data for SEO */} - - - -
- ); -} diff --git a/src/app/apple-icon.png b/src/app/apple-icon.png deleted file mode 100644 index 74680e5..0000000 Binary files a/src/app/apple-icon.png and /dev/null differ diff --git a/src/app/favicon.ico b/src/app/favicon.ico deleted file mode 100644 index 347ac3f..0000000 Binary files a/src/app/favicon.ico and /dev/null differ diff --git a/src/app/icon.svg b/src/app/icon.svg deleted file mode 100644 index cbddcc7..0000000 --- a/src/app/icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/lib/blog-manifest.generated.ts b/src/lib/blog-manifest.generated.ts deleted file mode 100644 index 399ec2f..0000000 --- a/src/lib/blog-manifest.generated.ts +++ /dev/null @@ -1,37 +0,0 @@ -// This file is auto-generated by scripts/generate-blog-manifest.mjs -// Do not edit manually. - -export const blogModuleLoaders = { - "ai-chatbots-for-business": { - "en": () => import("../app/[locale]/(marketing)/blog/ai-chatbots-for-business/en.mdx"), - "zh": () => import("../app/[locale]/(marketing)/blog/ai-chatbots-for-business/zh.mdx"), - }, - "ai-code-assistants-guide": { - "en": () => import("../app/[locale]/(marketing)/blog/ai-code-assistants-guide/en.mdx"), - "zh": () => import("../app/[locale]/(marketing)/blog/ai-code-assistants-guide/zh.mdx"), - }, - "ai-image-generators-compared": { - "en": () => import("../app/[locale]/(marketing)/blog/ai-image-generators-compared/en.mdx"), - "zh": () => import("../app/[locale]/(marketing)/blog/ai-image-generators-compared/zh.mdx"), - }, - "ai-productivity-tools-2025": { - "en": () => import("../app/[locale]/(marketing)/blog/ai-productivity-tools-2025/en.mdx"), - "zh": () => import("../app/[locale]/(marketing)/blog/ai-productivity-tools-2025/zh.mdx"), - }, - "ai-video-generation-tools": { - "en": () => import("../app/[locale]/(marketing)/blog/ai-video-generation-tools/en.mdx"), - "zh": () => import("../app/[locale]/(marketing)/blog/ai-video-generation-tools/zh.mdx"), - }, - "best-ai-tools-2025": { - "en": () => import("../app/[locale]/(marketing)/blog/best-ai-tools-2025/en.mdx"), - "zh": () => import("../app/[locale]/(marketing)/blog/best-ai-tools-2025/zh.mdx"), - }, - "free-ai-tools-guide": { - "en": () => import("../app/[locale]/(marketing)/blog/free-ai-tools-guide/en.mdx"), - "zh": () => import("../app/[locale]/(marketing)/blog/free-ai-tools-guide/zh.mdx"), - }, - "how-to-choose-ai-writing-tool": { - "en": () => import("../app/[locale]/(marketing)/blog/how-to-choose-ai-writing-tool/en.mdx"), - "zh": () => import("../app/[locale]/(marketing)/blog/how-to-choose-ai-writing-tool/zh.mdx"), - }, -} as const; diff --git a/src/themes/registry.ts b/src/themes/registry.ts deleted file mode 100644 index 1207709..0000000 --- a/src/themes/registry.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { ThemeId, ThemeModule } from "./types"; -import { classicTheme } from "./classic"; -import { productTheme } from "./product"; -import { editorialTheme } from "./editorial"; -import { nicheTheme } from "./niche"; -import { minimalTheme } from "./minimal"; - -/** 全部主题(五套 UI 验证,设计文档 §41) */ -export const themes: Record = { - classic: classicTheme, - product: productTheme, - editorial: editorialTheme, - niche: nicheTheme, - minimal: minimalTheme, -}; - -export const themeIds = Object.keys(themes) as ThemeId[]; - -export type { ThemeId, ThemeModule }; - -/** - * # 函数 parseThemeId - * 说明:容错解析主题标识;未知值回退 classic。 - */ -export function parseThemeId(value: string | undefined | null): ThemeId { - if (value && value in themes) return value as ThemeId; - return "classic"; -} - -/** - * # 函数 getActiveTheme - * 说明:读取当前站点主题(SITE_THEME 环境变量,服务端组件可用)。 - * 一个部署 = 一个站点;换站点 = 换环境变量,不改 Core 代码。 - */ -export function getActiveTheme(): ThemeModule { - return themes[parseThemeId(process.env.SITE_THEME ?? process.env.NEXT_PUBLIC_SITE_THEME)]; -} diff --git a/src/themes/types.ts b/src/themes/types.ts deleted file mode 100644 index aeb4bfa..0000000 --- a/src/themes/types.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { ComponentType } from "react"; - -/** 主题标识(与 SITE_THEME 环境变量对应) */ -export type ThemeId = - | "classic" - | "product" - | "editorial" - | "niche" - | "minimal"; - -/** 站点品牌配置(每个主题即一个"站点"的 Brand 层) */ -export interface ThemeBrand { - name: string; - /** 导航/页脚用的短标语 */ - tagline: string; - /** 首页主标题(hero headline) */ - headline: string; - /** 首页副标题 */ - subheadline: string; -} - -/** 主题模块接口 —— Core 与 Site Theme 分离(设计文档 §75 原则 1) */ -export interface ThemeModule { - id: ThemeId; - brand: ThemeBrand; - /** - * 主题级 CSS 变量覆盖(HSL 三元组,注入到页面根包装元素)。 - * 例:{ "--primary": "16 85% 55%" } - */ - cssVars?: Record; - /** 首页(必需)—— 每个主题最核心的差异化 */ - HomePage: ComponentType<{ locale: string }>; - /** 页面主色 class(用于主题化局部点缀,可选) */ - accentClass?: string; -}