diff --git a/antdv-next-admin/.editorconfig b/antdv-next-admin/.editorconfig new file mode 100644 index 0000000..111620e --- /dev/null +++ b/antdv-next-admin/.editorconfig @@ -0,0 +1,14 @@ +# EditorConfig is awesome: https://EditorConfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/antdv-next-admin/.env b/antdv-next-admin/.env new file mode 100644 index 0000000..54cd29e --- /dev/null +++ b/antdv-next-admin/.env @@ -0,0 +1,5 @@ +# Application Title +VITE_APP_TITLE=Antdv Next Admin + +# API Base URL +VITE_API_BASE_URL=/api diff --git a/antdv-next-admin/.env.development b/antdv-next-admin/.env.development new file mode 100644 index 0000000..f1693f6 --- /dev/null +++ b/antdv-next-admin/.env.development @@ -0,0 +1,7 @@ +# Development Environment + +# Enable Mock Data +VITE_USE_MOCK=true + +# API Base URL (use mock in development) +VITE_API_BASE_URL=/api diff --git a/antdv-next-admin/.env.production b/antdv-next-admin/.env.production new file mode 100644 index 0000000..1ce505f --- /dev/null +++ b/antdv-next-admin/.env.production @@ -0,0 +1,7 @@ +# Production Environment + +# Enable Mock Data for demo (GitHub Pages is static, so we must NOT call /api) +VITE_USE_MOCK=true + +# API Base URL (unused in mock mode; keep empty to avoid accidental /api calls) +VITE_API_BASE_URL= diff --git a/antdv-next-admin/.github/workflows/build.yml b/antdv-next-admin/.github/workflows/build.yml new file mode 100644 index 0000000..a67489f --- /dev/null +++ b/antdv-next-admin/.github/workflows/build.yml @@ -0,0 +1,35 @@ +name: Build + +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Install rolldown native bindings + run: pnpm add @rolldown/binding-linux-x64-gnu -D + + - name: Build + run: pnpm run build diff --git a/antdv-next-admin/.github/workflows/deploy.yml b/antdv-next-admin/.github/workflows/deploy.yml new file mode 100644 index 0000000..8ef46c8 --- /dev/null +++ b/antdv-next-admin/.github/workflows/deploy.yml @@ -0,0 +1,68 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: + - main # 当推送到 main 分支时触发 + + # 允许手动触发 + workflow_dispatch: + +# 设置 GITHUB_TOKEN 的权限 +permissions: + contents: read + pages: write + id-token: write + +# 只允许一个并发部署 +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Install rolldown native bindings + run: pnpm add @rolldown/binding-linux-x64-gnu -D + + - name: Build + run: pnpm run build + env: + NODE_ENV: production + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: "./dist" + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/antdv-next-admin/.gitignore b/antdv-next-admin/.gitignore new file mode 100644 index 0000000..a4b673f --- /dev/null +++ b/antdv-next-admin/.gitignore @@ -0,0 +1,31 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Environment files +.env.local +.env.*.local + +.claude +.agents diff --git a/antdv-next-admin/.oxfmtrc.json b/antdv-next-admin/.oxfmtrc.json new file mode 100644 index 0000000..82d6ce1 --- /dev/null +++ b/antdv-next-admin/.oxfmtrc.json @@ -0,0 +1,19 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "printWidth": 100, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "trailingComma": "all", + "insertFinalNewline": true, + "sortImports": { + "groups": [ + "type-import", + ["value-builtin", "value-external"], + "value-internal", + ["value-parent", "value-sibling", "value-index"], + "unknown" + ] + } +} \ No newline at end of file diff --git a/antdv-next-admin/.oxlintrc.json b/antdv-next-admin/.oxlintrc.json new file mode 100644 index 0000000..0764187 --- /dev/null +++ b/antdv-next-admin/.oxlintrc.json @@ -0,0 +1,29 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["vue", "typescript", "import"], + "categories": { + "correctness": "error", + "suspicious": "warn", + "perf": "warn" + }, + "rules": { + "no-unused-vars": "warn", + "typescript/no-explicit-any": "warn", + "typescript/no-unnecessary-type-assertion": "warn", + "import/no-duplicates": "error" + }, + "overrides": [ + { + "files": ["**/*.vue"], + "rules": { + "vue/no-unused-vars": "warn" + } + }, + { + "files": ["mock/**/*"], + "rules": { + "no-console": "off" + } + } + ] +} \ No newline at end of file diff --git a/antdv-next-admin/AGENTS.md b/antdv-next-admin/AGENTS.md new file mode 100644 index 0000000..bf448f6 --- /dev/null +++ b/antdv-next-admin/AGENTS.md @@ -0,0 +1,251 @@ +# Antdv Next Admin - Agent Guidelines + +A Vue 3 + TypeScript + Ant Design Vue admin scaffold with RBAC, theming, i18n, and mock APIs. + +## Project Structure + +``` +src/ +├── api/ # API layer - organized by domain (auth.ts, user.ts) +├── assets/styles/ # Global styles (variables.css, animations.css, global.css) +├── components/ # Reusable components (Layout/, Permission/, etc.) +├── composables/ # Composition functions (usePermission.ts, useWatermark.ts) +├── directives/ # Custom Vue directives (permission.ts) +├── locales/ # i18n translations (zh-CN.ts, en-US.ts) +├── router/ # Vue Router (routes.ts, guards.ts, utils.ts) +├── stores/ # Pinia stores - one per domain (auth.ts, theme.ts, layout.ts) +├── types/ # TypeScript interfaces/types (auth.ts, api.ts, router.ts) +├── utils/ # Pure utility functions (request.ts, storage.ts, helpers.ts) +└── views/ # Page components (dashboard/, system/, examples/) + +mock/ +├── data/ # Mock datasets (users.data.ts, roles.data.ts) +└── handlers/ # Mock API handlers (auth.mock.ts, user.mock.ts) + +tests/ +├── e2e/ # End-to-end tests (*.spec.ts) - templates for future Playwright setup +└── unit/ # Unit tests (*.spec.ts) - templates for future Vitest setup +``` + +## Build, Test, and Development Commands + +### Essential Commands +```bash +npm install # Install all dependencies +npm run dev # Start dev server at http://localhost:3000 (with mock APIs) +npm run build # Type check + production build → dist/ +npm run preview # Preview production build locally +npm run type-check # Run vue-tsc --noEmit (NO auto-fix) +``` + +### Pre-commit Requirements +**BEFORE any commit or PR:** +1. Run `npm run type-check` - must exit 0 with no errors +2. Run `npm run build` - must complete successfully +3. For RBAC/auth changes: manually verify login with `admin/123456` and `user/123456` + +### Testing Notes +- **No test runner configured yet** - Playwright/Vitest dependencies are NOT installed +- Test files in `tests/` are **templates** for future setup +- To add tests later: install test framework first, update package.json scripts, then write tests + +## Code Style Guidelines + +### Formatting (EditorConfig) +- **Indentation**: 2 spaces (NO tabs) +- **Line endings**: LF (Unix-style) +- **Encoding**: UTF-8 +- **Final newline**: required +- **Trailing whitespace**: trimmed (except in .md files) + +### TypeScript +- **Strict mode enabled** (`tsconfig.json`): all strict checks ON +- **Path aliases**: use `@/` for `src/` (e.g., `import { useAuthStore } from '@/stores/auth'`) +- **Type annotations**: explicit return types for public functions/composables +- **Type definitions**: place shared types in `src/types/`, domain-specific types near usage +- **No type suppression**: NEVER use `as any`, `@ts-ignore`, or `@ts-expect-error` + +### Vue Component Style +**Component naming:** +- **Files**: PascalCase for reusable components (`NotificationPanel.vue`, `ThemeToggle.vue`) +- **Views**: route-based folders with `index.vue` (`src/views/dashboard/index.vue`) + +**Component structure (Composition API only):** +```vue + + + + + +``` + +### Import Ordering +Group imports in this order (blank line between groups): +```ts +// 1. Vue core +import { ref, computed, onMounted } from 'vue' +import { useRoute, useRouter } from 'vue-router' + +// 2. Third-party libraries +import { message } from 'antdv-next' +import dayjs from 'dayjs' + +// 3. Project imports (@/ alias) +import { useAuthStore } from '@/stores/auth' +import { login, getUserInfo } from '@/api/auth' +import type { User, LoginParams } from '@/types/auth' +``` + +### Naming Conventions +| Type | Convention | Example | +|------|-----------|---------| +| Components | PascalCase | `NotificationPanel.vue`, `TabBar.vue` | +| Composables | `useXxx.ts` | `usePermission.ts`, `useFullscreen.ts` | +| Stores | Domain-based | `auth.ts`, `permission.ts`, `theme.ts` | +| Types/Interfaces | PascalCase | `User`, `LoginParams`, `ApiResponse` | +| Functions | camelCase | `getUserInfo()`, `checkPermission()` | +| Constants | SCREAMING_SNAKE_CASE | `TOKEN_KEY`, `API_BASE_URL` | + +### Error Handling +- **Try/catch**: wrap all async operations with meaningful error messages +- **Axios interceptors**: global error handling in `src/utils/request.ts` +- **User feedback**: use `message.error()` or `notification.error()` from antdv-next +```ts +try { + const response = await getUserInfo() + // Success path +} catch (error) { + console.error('Failed to fetch user info:', error) + message.error('获取用户信息失败') +} +``` + +### State Management (Pinia) +- **Setup stores only** (NOT options API) +- **One store per domain** - no god-objects +- **Store structure pattern:** +```ts +import { defineStore } from 'pinia' +import { ref, computed } from 'vue' + +export const useAuthStore = defineStore('auth', () => { + // State (ref) + const token = ref(null) + + // Getters (computed) + const isLoggedIn = computed(() => !!token.value) + + // Actions (functions) + const setToken = (newToken: string | null) => { + token.value = newToken + } + + return { token, isLoggedIn, setToken } +}) +``` + +### Permission System Usage +**Directive (in templates):** +```vue + +Create + + +Actions + + +Approve +``` + +**Composable (in script):** +```ts +const { can, canAll, hasRole } = usePermission() + +if (can('user.create')) { + // User has permission +} + +if (canAll(['user.edit', 'user.approve'])) { + // User has ALL permissions +} +``` + +## Configuration & Environment + +### Environment Variables +- **Development** (`.env.development`): `VITE_USE_MOCK=true`, `VITE_API_BASE_URL=/api` +- **Production** (`.env.production`): `VITE_USE_MOCK=false`, set real API URL +- **Never commit secrets** - use `.env.local` for sensitive values (gitignored) + +### Mock API System +- **Auto-enabled in dev** via `vite-plugin-mock-dev-server` +- **Handlers**: `mock/handlers/*.mock.ts` define endpoints +- **Data**: `mock/data/*.data.ts` contain sample datasets +- **Prefix**: all mock APIs use `/api` prefix (e.g., `/api/auth/login`) + +## Common Pitfalls to Avoid + +1. **No linter configured** - manually match nearby code style +2. **Don't suppress TypeScript errors** - fix the root cause instead +3. **Test files are templates** - don't try to run them without installing test frameworks +4. **Mock users**: `admin/123456` has full permissions, `user/123456` has limited permissions +5. **Dynamic routes**: permissions control route visibility via `src/router/guards.ts` +6. **KeepAlive caching**: managed by `tabs` store - check cached component names + +## Commit Guidelines + +**Use Conventional Commits:** +``` +type(scope): summary + +Examples: +feat(auth): add biometric login support +fix(permission): correct role-based route filtering +refactor(layout): extract sidebar menu logic to composable +docs(readme): update installation instructions +``` + +**Commit types:** `feat`, `fix`, `refactor`, `docs`, `style`, `test`, `chore`, `perf` + +## Pull Request Checklist + +- [ ] `npm run type-check` passes +- [ ] `npm run build` succeeds +- [ ] Manually tested login flow (if auth-related) +- [ ] Manually verified permissions (if RBAC-related) +- [ ] Screenshots/GIFs included (for UI changes) +- [ ] Commit messages follow Conventional Commits +- [ ] Changes are scoped (no unrelated refactors mixed in) diff --git a/antdv-next-admin/CLAUDE.md b/antdv-next-admin/CLAUDE.md new file mode 100644 index 0000000..12f95cb --- /dev/null +++ b/antdv-next-admin/CLAUDE.md @@ -0,0 +1,343 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +**antdv-next-admin** is a modern Vue 3 + TypeScript admin scaffold built on: +- **antdv-next** (Ant Design Vue) - UI component library +- **Pinia** - State management +- **Vue Router** - Routing with dynamic route generation +- **vue-i18n** - Internationalization (Chinese/English) +- **Vite** - Build tool +- Full RBAC permission system with dynamic routes +- Mock data system for development + +## Environment Requirements + +- Node.js >= 16 +- npm >= 8 + +## Common Commands + +```bash +# Development +npm run dev # Start dev server on http://localhost:3000 + +# Building +npm run build # Production build +npm run build:check # Type check before build +npm run preview # Preview production build + +# Type Checking +npm run type-check # TypeScript type checking +``` + +**Note**: This project currently has no test or lint scripts configured. + +## Architecture + +### State Management (Pinia Stores) + +All stores use the **setup syntax** pattern. Located in `src/stores/`: + +- **auth** - Authentication, user info, roles, permissions. Includes demo mode for development. +- **permission** - Dynamic route generation based on user roles/permissions +- **theme** - Theme mode (light/dark/auto), primary color (6 presets), CSS variable management +- **layout** - Layout mode (vertical/horizontal), sidebar state, mobile detection +- **tabs** - Multi-tab system with KeepAlive caching, affix tabs, right-click menu +- **settings** - User preferences (animations, gray mode, menu theme, etc.) +- **notification** - Notification panel state + +**Key Pattern**: Store initialization happens in router guards. Auth store includes both demo mode (mock) and production mode (real API) login flows. + +### Routing System + +Routes are organized in three categories (`src/router/routes.ts`): + +1. **staticRoutes** - No auth required (login, error pages) +2. **basicRoutes** - Require auth (dashboard, profile) +3. **asyncRoutes** - Require specific permissions (system management, etc.) + +**Dynamic Route Generation**: +- Routes are generated in `src/router/guards.ts` during navigation +- Permission store (`generateRoutes`) filters async routes based on user roles/permissions +- Routes are added dynamically with `router.addRoute()` after successful login +- First navigation to dynamic route may redirect to 404, then recover by regenerating routes + +**Route Meta Fields**: +```typescript +{ + title: string // i18n key for page title + icon?: string // Icon component name (e.g., 'DashboardOutlined') + requiresAuth?: boolean // Default true + requiredPermissions?: string[] // Permission codes required + requiredRoles?: string[] // Role codes required + hidden?: boolean // Hide from menu + affix?: boolean // Pin tab (can't be closed) + order?: number // Menu sort order +} +``` + +### Permission System + +Three ways to check permissions: + +1. **Directive** (`src/directives/permission.ts`): + ```vue + Create + Actions + Approve + ``` + +2. **Composable** (`src/composables/usePermission.ts`): + ```typescript + const { can, canAll } = usePermission() + if (can('user.create')) { /* ... */ } + if (canAll(['user.edit', 'user.approve'])) { /* ... */ } + ``` + +3. **Component** (`src/components/Permission/PermissionButton.vue`): + ```vue + + Create User + + ``` + +### API & Request Handling + +**Base Service**: `src/utils/request.ts` - Axios instance with interceptors + +- Auto-adds Bearer token from auth store +- Handles 401 (logout + redirect to login), 403 (forbidden), 404, 500 +- Response interceptor checks `res.code` field (expects 200) +- All API calls use the `request` helper with typed responses + +**Mock System** (`mock/` directory): +- Enabled via `VITE_USE_MOCK=true` in `.env.development` +- Two-layer structure: `data/` (mock data sources) + `handlers/` (request handlers) +- Available mock APIs: auth, users, roles, permissions, dashboard +- Supports pagination, search, CRUD operations + +### Pro Components + +**ProTable** (`src/components/Pro/ProTable/`): +- Configuration-based table with search form, toolbar, pagination +- Column types defined via `ProTableColumn` interface (see `src/types/pro.ts`) +- Supports value types: text, date, dateTime, tag, badge, money, percent, avatar, etc. +- Search types: input, select, dateRange, datePicker, etc. +- Built-in features: column resizing, fixed headers, sorting, actions column +- **Important**: Uses CSS variables for scrollbar width alignment (see scrollbar.ts utility) +- Two rendering modes: + - `scroll-mode`: Table handles its own scrolling + - `fill-mode`: Parent container scrolls, table fills height with `fixedHeader` + +**ProForm** (`src/components/Pro/ProForm/`): +- Configuration-based form with validation +- Form item types: input, password, textarea, number, select, radio, checkbox, switch, datePicker, etc. +- Grid layout support with `colSpan` and responsive `cols` +- Dynamic options via `request` function +- Custom rendering via `render` prop + +**Type Definitions**: Always reference `src/types/pro.ts` for column/form configurations. + +### Icons + +Two icon systems are available: + +1. **Ant Design Icons** (`@antdv-next/icons`): + ```vue + import { UserOutlined } from '@antdv-next/icons' + ``` + +2. **Iconify** (`@iconify/vue`): + - Component: `src/components/Icon/index.vue` + - Picker: `src/components/IconPicker/index.vue` + - Supports online/offline modes with local icon sets (ion, mdi, ri) + - Use `` syntax + +### Theme System + +Themes use **CSS variables** defined in `src/assets/styles/variables.css`: + +- 6 preset primary colors: blue (default), green, purple, red, orange, cyan +- Dark/light/auto modes +- CSS variables follow pattern: `--ant-primary-color`, `--bg-color`, `--text-color`, etc. +- Theme store dynamically updates CSS variables on document root +- Sidebar supports independent dark/light theme (via `--sidebar-bg-color` variables) + +### Internationalization + +**System**: vue-i18n with locale files in `src/locales/` + +- `zh-CN.ts` - Chinese (default) +- `en-US.ts` - English +- Access via `$t('key')` in templates or `t('key')` from `useI18n()` +- Helper: `src/utils/i18n.ts` - `resolveLocaleText()` for dynamic text resolution + +### Charts & Visualization + +**ECharts Integration**: The project includes `echarts` and `vue-echarts` for data visualization in the dashboard. Use the `` component from `vue-echarts` for rendering charts. + +### Keyboard Shortcuts + +- `Ctrl/Cmd + K` - Open global menu search + +## Development Guidelines + +### File Naming & Structure + +- Components: **PascalCase** (e.g., `AdminLayout.vue`) +- Files: **kebab-case** (e.g., `use-permission.ts`) +- Path alias: Use `@/` for `src/` (configured in vite.config.ts and tsconfig.json) + +### TypeScript + +- **Strict mode enabled** - All code must be type-safe +- Types organized in `src/types/`: api.ts, auth.ts, router.ts, layout.ts, pro.ts +- Use `type` for object shapes, `interface` for extensible contracts +- Route type: `AppRouteRecordRaw` (extends Vue Router's `RouteRecordRaw`) +- API responses: `ApiResponse` pattern + +### Adding New Pages + +1. Create view in `src/views/[module]/` +2. Add route to appropriate category in `src/router/routes.ts` +3. Add i18n keys to `src/locales/zh-CN.ts` and `en-US.ts` +4. If requires permissions, set `meta.requiredPermissions` or `meta.requiredRoles` +5. Router guards will handle dynamic route injection + +### Adding New Stores + +Follow the **setup syntax** pattern: + +```typescript +import { defineStore } from 'pinia' +import { ref, computed } from 'vue' + +export const useMyStore = defineStore('my-store', () => { + // State + const data = ref(null) + + // Getters + const processedData = computed(() => /* ... */) + + // Actions + const fetchData = async () => { /* ... */ } + + return { data, processedData, fetchData } +}) +``` + +Export from `src/stores/index.ts` for centralized access. + +### Working with ProTable + +Always define columns using the `ProTableColumn` type: + +```typescript +import type { ProTableColumn } from '@/types/pro' + +const columns: ProTableColumn[] = [ + { + title: 'Name', + dataIndex: 'name', + search: true, // Enable search + searchType: 'input', // Search field type + valueType: 'text' // Display type + }, + { + title: 'Status', + dataIndex: 'status', + valueType: 'tag', + valueEnum: { + active: { text: 'Active', status: 'success' }, + inactive: { text: 'Inactive', status: 'default' } + } + } +] +``` + +**Known Issue**: ProTable had scrollbar alignment bugs that were fixed by: +- Using CSS variables for dynamic scrollbar width (`--actual-scrollbar-width`) +- Scrollbar detection utility in `src/utils/scrollbar.ts` +- When modifying table layout, verify scrollbar placeholder alignment + +### Authentication Flow + +**Demo Mode** (development): +- Credentials: `admin/123456` or `user/123456` +- No real backend, uses mock data from auth store +- Token stored in localStorage + +**Production Mode**: +- Set `VITE_USE_MOCK=false` and `VITE_API_BASE_URL` in `.env.production` +- Uses real API calls via `src/api/auth.ts` + +### Mock Data Development + +To add new mock endpoints: + +1. Create data source in `mock/data/[entity].data.ts` +2. Create handler in `mock/handlers/[entity].mock.ts` +3. Mock server auto-reloads, accessible at `/api/*` prefix + +## Common Patterns + +### Conditional Rendering by Permission + +```typescript +import { useAuthStore } from '@/stores/auth' +const authStore = useAuthStore() + +if (authStore.hasAnyPermission(['user.edit', 'user.delete'])) { + // Show actions +} +``` + +### Accessing Current Route in Components + +```typescript +import { useRoute } from 'vue-router' +const route = useRoute() +console.log(route.meta.title) +``` + +### Multi-Tab Operations + +```typescript +import { useTabsStore } from '@/stores/tabs' +const tabsStore = useTabsStore() + +tabsStore.closeTab(path) // Close specific tab +tabsStore.closeOtherTabs(path) // Close all except this +tabsStore.closeAllTabs() // Close all closeable tabs +tabsStore.refreshTab(path) // Refresh tab content +``` + +### Theme Changes + +```typescript +import { useThemeStore } from '@/stores/theme' +const themeStore = useThemeStore() + +themeStore.setThemeMode('dark') // 'light' | 'dark' | 'auto' +themeStore.setPrimaryColor('#1890ff') // Any valid color +``` + +## Important Notes + +- **Never commit** environment-specific values to `.env` files +- **Router guards** handle most auth/permission logic - avoid duplicating checks +- **CSS variables** are the preferred method for theming - avoid hardcoded colors +- **ProTable fixedHeader mode** requires parent container with fixed height +- **Dynamic routes** are regenerated on each login - changes to `asyncRoutes` require re-login +- **Tabs state** persists in localStorage via settings store +- **Mock mode** is determined by `VITE_USE_MOCK` env variable, checked at runtime + +## Default Accounts + +Development mode credentials: + +- Admin: `admin / 123456` +- User: `user / 123456` diff --git a/antdv-next-admin/DEPLOYMENT.md b/antdv-next-admin/DEPLOYMENT.md new file mode 100644 index 0000000..cbbabad --- /dev/null +++ b/antdv-next-admin/DEPLOYMENT.md @@ -0,0 +1,93 @@ +# GitHub Pages 部署指南 + +本项目已配置为可自动部署到 GitHub Pages。 + +## 📦 部署地址 + +- **生产环境**: https://yelog.github.io/antdv-next-admin/ + +## 🚀 自动部署 + +项目使用 GitHub Actions 实现自动化部署: + +1. 当代码推送到 `main` 分支时,会自动触发部署流程 +2. GitHub Actions 会自动构建项目并部署到 GitHub Pages +3. 部署完成后,可以通过上述地址访问 + +## ⚙️ 配置说明 + +### 1. Vite 配置 +```typescript +// vite.config.ts +base: process.env.NODE_ENV === 'production' ? '/antdv-next-admin/' : '/' +``` + +### 2. GitHub Actions +- 工作流文件: `.github/workflows/deploy.yml` +- 触发条件: 推送到 main 分支或手动触发 +- 构建命令: `npm run build` + +### 3. SPA 路由支持 +- `public/404.html`: 处理 404 重定向 +- `index.html`: 接收重定向并恢复路由 +- `public/.nojekyll`: 禁用 Jekyll 处理 + +## 📝 手动部署步骤 + +如果需要手动部署: + +```bash +# 1. 构建项目 +npm run build + +# 2. 进入构建目录 +cd dist + +# 3. 初始化 git 仓库 +git init +git add -A +git commit -m 'deploy' + +# 4. 推送到 gh-pages 分支 +git push -f git@github.com:yelog/antdv-next-admin.git main:gh-pages + +# 5. 返回项目根目录 +cd - +``` + +## 🔧 GitHub 仓库设置 + +确保在 GitHub 仓库设置中: + +1. 进入仓库 Settings → Pages +2. Source 选择 "GitHub Actions" +3. 等待首次部署完成 + +## 📊 查看部署状态 + +- 在 GitHub 仓库的 "Actions" 标签页查看部署进度 +- 绿色勾号表示部署成功 +- 红色叉号表示部署失败,点击查看日志 + +## 🐛 常见问题 + +### 1. 404 错误 +- 确保 `base` 配置正确 +- 检查 GitHub Pages 设置是否正确 + +### 2. 路由不工作 +- 确保 `404.html` 和 `index.html` 中的重定向脚本存在 +- 检查浏览器控制台是否有错误 + +### 3. 样式/资源 404 +- 确保 `base` 路径配置正确 +- 检查构建后的资源路径是否正确 + +## 🔐 权限说明 + +GitHub Actions 需要以下权限: +- `contents: read` - 读取代码 +- `pages: write` - 写入 Pages +- `id-token: write` - 身份验证 + +这些权限已在 workflow 文件中配置。 diff --git a/antdv-next-admin/LICENSE b/antdv-next-admin/LICENSE new file mode 100644 index 0000000..0daa361 --- /dev/null +++ b/antdv-next-admin/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 yelog + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/antdv-next-admin/docs/images/screenshot.png b/antdv-next-admin/docs/images/screenshot.png new file mode 100644 index 0000000..23f5323 Binary files /dev/null and b/antdv-next-admin/docs/images/screenshot.png differ diff --git a/antdv-next-admin/index.html b/antdv-next-admin/index.html new file mode 100644 index 0000000..d8717a6 --- /dev/null +++ b/antdv-next-admin/index.html @@ -0,0 +1,23 @@ + + + + + + + Antdv Next Admin + + + + +
+ + + diff --git a/antdv-next-admin/mock/data/config.data.ts b/antdv-next-admin/mock/data/config.data.ts new file mode 100644 index 0000000..c071909 --- /dev/null +++ b/antdv-next-admin/mock/data/config.data.ts @@ -0,0 +1,219 @@ +import type { SysConfig } from '@/types/config'; + +export const sysConfigs: SysConfig[] = [ + // basic + { + id: '1', + name: 'Site Name', + key: 'site.name', + value: 'Antdv Next Admin', + valueType: 'string', + group: 'basic', + description: 'System display name', + builtIn: true, + sort: 1, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '2', + name: 'Site Description', + key: 'site.description', + value: 'Vue3 + Ant Design Vue Admin System', + valueType: 'string', + group: 'basic', + description: 'Site SEO description', + builtIn: true, + sort: 2, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '3', + name: 'Copyright', + key: 'site.copyright', + value: '© 2024 Antdv Next Admin', + valueType: 'string', + group: 'basic', + description: 'Footer copyright text', + builtIn: false, + sort: 3, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '4', + name: 'System Version', + key: 'site.version', + value: '1.0.0', + valueType: 'string', + group: 'basic', + description: 'Current system version', + builtIn: true, + sort: 4, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + + // security + { + id: '10', + name: 'Max Login Attempts', + key: 'security.maxLoginAttempts', + value: '5', + valueType: 'number', + group: 'security', + description: 'Lock account after N failed login attempts', + builtIn: true, + sort: 1, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '11', + name: 'Lock Duration (min)', + key: 'security.lockDuration', + value: '30', + valueType: 'number', + group: 'security', + description: 'Account lock duration in minutes', + builtIn: true, + sort: 2, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '12', + name: 'Token Expiry (hours)', + key: 'security.tokenExpiry', + value: '24', + valueType: 'number', + group: 'security', + description: 'Login token expiration time', + builtIn: true, + sort: 3, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '13', + name: 'Enable Captcha', + key: 'security.captchaEnabled', + value: 'true', + valueType: 'boolean', + group: 'security', + description: 'Require captcha for login', + builtIn: false, + sort: 4, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '14', + name: 'Min Password Length', + key: 'security.minPasswordLength', + value: '6', + valueType: 'number', + group: 'security', + description: 'Minimum password character count', + builtIn: true, + sort: 5, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + + // upload + { + id: '20', + name: 'Max Upload Size (MB)', + key: 'upload.maxSize', + value: '10', + valueType: 'number', + group: 'upload', + description: 'Maximum single file upload size', + builtIn: true, + sort: 1, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '21', + name: 'Allowed Upload Types', + key: 'upload.allowedTypes', + value: 'jpg,jpeg,png,gif,pdf,doc,docx,xls,xlsx,zip', + valueType: 'string', + group: 'upload', + description: 'Allowed file extensions, comma separated', + builtIn: true, + sort: 2, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '22', + name: 'Image Compression Quality', + key: 'upload.imageQuality', + value: '80', + valueType: 'number', + group: 'upload', + description: 'Auto compression quality for uploaded images (0-100)', + builtIn: false, + sort: 3, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + + // notification + { + id: '30', + name: 'Enable Email Notification', + key: 'notify.emailEnabled', + value: 'true', + valueType: 'boolean', + group: 'notification', + description: 'Enable email notification feature', + builtIn: false, + sort: 1, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '31', + name: 'SMTP Server', + key: 'notify.smtpHost', + value: 'smtp.example.com', + valueType: 'string', + group: 'notification', + description: 'SMTP server address for sending emails', + builtIn: false, + sort: 2, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '32', + name: 'SMTP Port', + key: 'notify.smtpPort', + value: '465', + valueType: 'number', + group: 'notification', + description: 'SMTP server port', + builtIn: false, + sort: 3, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '33', + name: 'Sender Email', + key: 'notify.senderEmail', + value: 'noreply@example.com', + valueType: 'string', + group: 'notification', + description: 'System notification sender email', + builtIn: false, + sort: 4, + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, +]; diff --git a/antdv-next-admin/mock/data/dashboard.data.ts b/antdv-next-admin/mock/data/dashboard.data.ts new file mode 100644 index 0000000..5b836d5 --- /dev/null +++ b/antdv-next-admin/mock/data/dashboard.data.ts @@ -0,0 +1,100 @@ +import { faker } from '@faker-js/faker'; + +// Statistics data +export const mockStats = { + totalUsers: 12458, + totalOrders: 8946, + totalRevenue: 456789.56, + conversionRate: 3.24, +}; + +// Sales trend data (last 12 months) +export const mockSalesTrend = Array.from({ length: 12 }, (_, index) => { + const date = new Date(); + date.setMonth(date.getMonth() - (11 - index)); + return { + month: date.toLocaleDateString('en-US', { year: 'numeric', month: '2-digit' }), + sales: faker.number.int({ min: 20000, max: 80000 }), + orders: faker.number.int({ min: 500, max: 2000 }), + }; +}); + +// User distribution by city +export const mockUserDistribution = [ + { city: 'Beijing', value: 2341 }, + { city: 'Shanghai', value: 2156 }, + { city: 'Guangzhou', value: 1876 }, + { city: 'Shenzhen', value: 1654 }, + { city: 'Hangzhou', value: 1432 }, + { city: 'Chengdu', value: 1289 }, + { city: 'Other', value: 2710 }, +]; + +// Recent activities +export const mockActivities = Array.from({ length: 10 }, (_, index) => ({ + id: faker.string.uuid(), + user: faker.person.fullName(), + avatar: faker.image.avatar(), + action: faker.helpers.arrayElement([ + 'Created a new user', + 'Updated role permissions', + 'Deleted expired data', + 'Exported reports', + 'Updated system settings', + 'Uploaded a new file', + ]), + timestamp: faker.date.recent({ days: 7 }).toISOString(), + type: faker.helpers.arrayElement(['success', 'info', 'warning', 'error']), +})); + +// Chart data for different visualizations +export const mockChartData = { + // Line chart - Sales trend + lineChart: { + xAxis: mockSalesTrend.map((item) => item.month), + series: [ + { + name: 'Sales', + data: mockSalesTrend.map((item) => item.sales), + }, + { + name: 'Orders', + data: mockSalesTrend.map((item) => item.orders), + }, + ], + }, + + // Bar chart - Monthly comparison + barChart: { + xAxis: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'], + series: [ + { + name: 'Current Year', + data: [820, 932, 901, 934, 1290, 1330], + }, + { + name: 'Last Year', + data: [720, 832, 801, 834, 1190, 1230], + }, + ], + }, + + // Pie chart - User distribution + pieChart: { + data: mockUserDistribution.map((item) => ({ + name: item.city, + value: item.value, + })), + }, + + // Area chart - Traffic trend + areaChart: { + xAxis: Array.from({ length: 24 }, (_, i) => `${i}:00`), + series: [ + { + name: 'Visits', + data: Array.from({ length: 24 }, () => faker.number.int({ min: 100, max: 1000 })), + }, + ], + }, +}; diff --git a/antdv-next-admin/mock/data/dept.data.ts b/antdv-next-admin/mock/data/dept.data.ts new file mode 100644 index 0000000..ee54268 --- /dev/null +++ b/antdv-next-admin/mock/data/dept.data.ts @@ -0,0 +1,224 @@ +import type { Department } from '@/types/dept'; + +/** + * 部门数据(扁平结构,用于增删改查) + */ +export const departments: Department[] = [ + { + id: '1', + name: '总公司', + parentId: null, + leader: '张总', + phone: '13800000001', + email: 'ceo@example.com', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + // 一级部门 + { + id: '10', + name: '技术研发部', + parentId: '1', + leader: '李工', + phone: '13800000010', + email: 'tech@example.com', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '11', + name: '产品设计部', + parentId: '1', + leader: '王设计', + phone: '13800000011', + email: 'design@example.com', + sort: 2, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '12', + name: '市场营销部', + parentId: '1', + leader: '赵市场', + phone: '13800000012', + email: 'market@example.com', + sort: 3, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '13', + name: '人力资源部', + parentId: '1', + leader: '孙HR', + phone: '13800000013', + email: 'hr@example.com', + sort: 4, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '14', + name: '财务部', + parentId: '1', + leader: '周财务', + phone: '13800000014', + email: 'finance@example.com', + sort: 5, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + // 二级部门 - 技术研发部下属 + { + id: '101', + name: '前端开发组', + parentId: '10', + leader: '陈前端', + phone: '13800000101', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '102', + name: '后端开发组', + parentId: '10', + leader: '刘后端', + phone: '13800000102', + sort: 2, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '103', + name: '测试组', + parentId: '10', + leader: '吴测试', + phone: '13800000103', + sort: 3, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '104', + name: '运维组', + parentId: '10', + leader: '郑运维', + phone: '13800000104', + sort: 4, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + // 二级部门 - 产品设计部下属 + { + id: '111', + name: 'UI设计组', + parentId: '11', + leader: '钱UI', + phone: '13800000111', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '112', + name: '产品策划组', + parentId: '11', + leader: '冯策划', + phone: '13800000112', + sort: 2, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + // 二级部门 - 市场营销部下属 + { + id: '121', + name: '品牌推广组', + parentId: '12', + leader: '韩品牌', + phone: '13800000121', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '122', + name: '渠道销售组', + parentId: '12', + leader: '杨销售', + phone: '13800000122', + sort: 2, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + // 二级部门 - 人力资源部下属 + { + id: '131', + name: '招聘组', + parentId: '13', + leader: '朱招聘', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-01-01 00:00:00', + }, + { + id: '132', + name: '培训组', + parentId: '13', + leader: '秦培训', + sort: 2, + status: 'disabled', + remark: '暂停运营', + createTime: '2024-01-01 00:00:00', + updateTime: '2024-06-01 00:00:00', + }, +]; + +/** + * 将扁平数据构建为树形结构 + */ +export function buildDeptTree(list: Department[]): Department[] { + const map = new Map(); + const roots: Department[] = []; + + list.forEach((item) => { + map.set(item.id, { ...item, children: [] }); + }); + + map.forEach((item) => { + if (item.parentId && map.has(item.parentId)) { + map.get(item.parentId)!.children!.push(item); + } else if (!item.parentId) { + roots.push(item); + } + }); + + // 递归排序 + const sortTree = (nodes: Department[]) => { + nodes.sort((a, b) => a.sort - b.sort); + nodes.forEach((n) => { + if (n.children?.length) sortTree(n.children); + else delete n.children; + }); + }; + sortTree(roots); + return roots; +} diff --git a/antdv-next-admin/mock/data/dict.data.ts b/antdv-next-admin/mock/data/dict.data.ts new file mode 100644 index 0000000..54b2279 --- /dev/null +++ b/antdv-next-admin/mock/data/dict.data.ts @@ -0,0 +1,233 @@ +import type { DictType, DictData } from '@/types/dict'; + +/** + * 字典类型数据 + */ +export const dictTypes: DictType[] = [ + { + id: '1', + name: '用户状态', + code: 'user_status', + description: '用户账号状态', + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '2', + name: '性别', + code: 'gender', + description: '用户性别', + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '3', + name: '订单状态', + code: 'order_status', + description: '订单状态', + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '4', + name: '支付方式', + code: 'payment_method', + description: '支付方式', + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '5', + name: '通知类型', + code: 'notification_type', + description: '系统通知类型', + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, +]; + +/** + * 字典数据 + */ +export const dictData: DictData[] = [ + // 用户状态 + { + id: '1', + typeCode: 'user_status', + label: '正常', + value: 'active', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '2', + typeCode: 'user_status', + label: '禁用', + value: 'inactive', + sort: 2, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '3', + typeCode: 'user_status', + label: '锁定', + value: 'locked', + sort: 3, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + // 性别 + { + id: '4', + typeCode: 'gender', + label: '男', + value: 'male', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '5', + typeCode: 'gender', + label: '女', + value: 'female', + sort: 2, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '6', + typeCode: 'gender', + label: '未知', + value: 'unknown', + sort: 3, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + // 订单状态 + { + id: '7', + typeCode: 'order_status', + label: '待支付', + value: 'pending', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '8', + typeCode: 'order_status', + label: '已支付', + value: 'paid', + sort: 2, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '9', + typeCode: 'order_status', + label: '配送中', + value: 'shipping', + sort: 3, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '10', + typeCode: 'order_status', + label: '已完成', + value: 'completed', + sort: 4, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '11', + typeCode: 'order_status', + label: '已取消', + value: 'cancelled', + sort: 5, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + // 支付方式 + { + id: '12', + typeCode: 'payment_method', + label: '支付宝', + value: 'alipay', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '13', + typeCode: 'payment_method', + label: '微信支付', + value: 'wechat', + sort: 2, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '14', + typeCode: 'payment_method', + label: '银行卡', + value: 'bank_card', + sort: 3, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + // 通知类型 + { + id: '15', + typeCode: 'notification_type', + label: '系统通知', + value: 'system', + sort: 1, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '16', + typeCode: 'notification_type', + label: '订单通知', + value: 'order', + sort: 2, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, + { + id: '17', + typeCode: 'notification_type', + label: '活动通知', + value: 'activity', + sort: 3, + status: 'enabled', + createTime: '2024-01-01 10:00:00', + updateTime: '2024-01-01 10:00:00', + }, +]; diff --git a/antdv-next-admin/mock/data/file.data.ts b/antdv-next-admin/mock/data/file.data.ts new file mode 100644 index 0000000..b9edc67 --- /dev/null +++ b/antdv-next-admin/mock/data/file.data.ts @@ -0,0 +1,79 @@ +import type { SysFile } from '@/types/file'; + +const exts = ['jpg', 'png', 'pdf', 'docx', 'xlsx', 'zip', 'mp4', 'txt', 'pptx', 'svg']; +const mimeMap: Record = { + jpg: 'image/jpeg', + png: 'image/png', + pdf: 'application/pdf', + docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + zip: 'application/zip', + mp4: 'video/mp4', + txt: 'text/plain', + pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + svg: 'image/svg+xml', +}; +const storages: SysFile['storage'][] = ['local', 'oss', 'cos']; +const uploaders = ['admin', 'zhangsan', 'lisi', 'wangwu']; +const fileNames: Record = { + jpg: ['产品封面图', '用户头像', '活动海报', '团队合照', '办公环境'], + png: ['系统Logo', '二维码', '图标素材', '截图', '水印模板'], + pdf: ['用户手册', '合同模板', '年度报告', '技术文档', '发票'], + docx: ['需求文档', '会议纪要', '工作总结', '项目方案', '操作指南'], + xlsx: ['员工花名册', '财务报表', '数据统计', '考勤记录', '库存清单'], + zip: ['项目源码', '资源包', '备份文件', '部署包', '日志归档'], + mp4: ['产品演示', '培训视频', '操作教程', '宣传片', '会议录像'], + txt: ['配置说明', '更新日志', '临时笔记', '导入模板', '错误日志'], + pptx: ['季度汇报', '产品介绍', '培训课件', '方案演示', '年终总结'], + svg: ['图标文件', '流程图', '架构图', '组织结构图', '数据图表'], +}; + +function randomDate(start: string, end: string) { + const s = new Date(start).getTime(); + const e = new Date(end).getTime(); + const d = new Date(s + Math.random() * (e - s)); + return d.toISOString().replace('T', ' ').slice(0, 19); +} + +function randomSize(ext: string): number { + const ranges: Record = { + jpg: [50_000, 5_000_000], + png: [20_000, 3_000_000], + pdf: [100_000, 20_000_000], + docx: [30_000, 10_000_000], + xlsx: [20_000, 15_000_000], + zip: [500_000, 100_000_000], + mp4: [5_000_000, 500_000_000], + txt: [100, 500_000], + pptx: [200_000, 50_000_000], + svg: [1_000, 200_000], + }; + const [min, max] = ranges[ext] || [1000, 1_000_000]; + return Math.floor(min + Math.random() * (max - min)); +} + +export const sysFiles: SysFile[] = []; + +let id = 1; +for (const ext of exts) { + const names = fileNames[ext]; + for (const name of names) { + const storage = storages[Math.floor(Math.random() * storages.length)]; + const originalName = `${name}.${ext}`; + sysFiles.push({ + id: String(id++), + name: `${Date.now()}_${Math.random().toString(36).slice(2, 8)}.${ext}`, + originalName, + path: `/uploads/${ext}/${Date.now()}_${Math.random().toString(36).slice(2, 8)}.${ext}`, + size: randomSize(ext), + mimeType: mimeMap[ext] || 'application/octet-stream', + ext, + storage, + uploader: uploaders[Math.floor(Math.random() * uploaders.length)], + remark: '', + createTime: randomDate('2024-01-01', '2024-12-31'), + }); + } +} + +sysFiles.sort((a, b) => b.createTime.localeCompare(a.createTime)); diff --git a/antdv-next-admin/mock/data/log.data.ts b/antdv-next-admin/mock/data/log.data.ts new file mode 100644 index 0000000..7adfcf8 --- /dev/null +++ b/antdv-next-admin/mock/data/log.data.ts @@ -0,0 +1,128 @@ +import type { OperationLog, LoginLog } from '@/types/log'; + +const modules = [ + 'userManagement', + 'roleManagement', + 'menuManagement', + 'dictionary', + 'systemLogin', + 'profile', + 'dashboard', +]; +const actions: OperationLog['action'][] = [ + 'login', + 'logout', + 'create', + 'update', + 'delete', + 'export', + 'other', +]; +const browsers = ['Chrome 120', 'Firefox 121', 'Safari 17', 'Edge 120']; +const osList = ['Windows 11', 'macOS 14', 'Ubuntu 22.04', 'iOS 17']; +const ips = [ + '192.168.1.100', + '192.168.1.101', + '10.0.0.50', + '172.16.0.88', + '192.168.2.200', + '10.10.1.33', +]; +const usernames = ['admin', 'user', 'zhangsan', 'lisi', 'wangwu']; + +const actionDescMap: Record = { + login: ['System login'], + logout: ['System logout'], + create: ['Create user', 'Create role', 'Create menu', 'Create dict type', 'Create dict data'], + update: [ + 'Update user info', + 'Update role permissions', + 'Update menu config', + 'Update dict data', + 'Update profile', + 'Reset user password', + ], + delete: ['Delete user', 'Delete role', 'Delete menu', 'Delete dict data'], + export: ['Export user list', 'Export role list', 'Export operation log'], + other: ['View dashboard', 'Refresh cache'], +}; + +const actionUrlMap: Record = { + login: ['/api/auth/login'], + logout: ['/api/auth/logout'], + create: ['/api/user', '/api/role', '/api/permission', '/api/dict/type', '/api/dict/data'], + update: ['/api/user/1', '/api/role/1', '/api/permission/1', '/api/dict/data/1', '/api/profile'], + delete: ['/api/user/1', '/api/role/1', '/api/permission/1', '/api/dict/data/1'], + export: ['/api/user/export', '/api/role/export', '/api/log/export'], + other: ['/api/dashboard/stats', '/api/cache/refresh'], +}; + +function randomItem(arr: T[]): T { + return arr[Math.floor(Math.random() * arr.length)]; +} + +function generateTime(daysAgo: number): string { + const d = new Date(); + d.setDate(d.getDate() - daysAgo); + d.setHours(Math.floor(Math.random() * 14) + 8); + d.setMinutes(Math.floor(Math.random() * 60)); + d.setSeconds(Math.floor(Math.random() * 60)); + return d.toISOString().replace('T', ' ').slice(0, 19); +} + +export const operationLogs: OperationLog[] = []; +for (let i = 1; i <= 80; i++) { + const action = randomItem(actions); + const descs = actionDescMap[action]; + const urls = actionUrlMap[action]; + const isFail = Math.random() < 0.08; + operationLogs.push({ + id: String(i), + username: randomItem(usernames), + module: randomItem(modules), + action, + description: randomItem(descs), + method: + action === 'create' + ? 'POST' + : action === 'update' + ? 'PUT' + : action === 'delete' + ? 'DELETE' + : 'GET', + url: randomItem(urls), + ip: randomItem(ips), + browser: randomItem(browsers), + os: randomItem(osList), + status: isFail ? 'fail' : 'success', + errorMsg: isFail ? 'Insufficient permissions' : undefined, + duration: Math.floor(Math.random() * 500) + 10, + createTime: generateTime(Math.floor(i / 6)), + }); +} +operationLogs.sort((a, b) => b.createTime.localeCompare(a.createTime)); + +export const loginLogs: LoginLog[] = []; +const loginMessages = [ + 'Login successful', + 'Login successful', + 'Login successful', + 'Wrong password', + 'Account locked', + 'Captcha error', +]; +for (let i = 1; i <= 50; i++) { + const msg = randomItem(loginMessages); + const isSuccess = msg === 'Login successful'; + loginLogs.push({ + id: String(i), + username: randomItem(usernames), + ip: randomItem(ips), + browser: randomItem(browsers), + os: randomItem(osList), + status: isSuccess ? 'success' : 'fail', + message: msg, + createTime: generateTime(Math.floor(i / 4)), + }); +} +loginLogs.sort((a, b) => b.createTime.localeCompare(a.createTime)); diff --git a/antdv-next-admin/mock/data/permissions.data.ts b/antdv-next-admin/mock/data/permissions.data.ts new file mode 100644 index 0000000..1ca9e86 --- /dev/null +++ b/antdv-next-admin/mock/data/permissions.data.ts @@ -0,0 +1,607 @@ +import type { Permission } from '@/types/auth'; + +export const mockPermissions: Permission[] = [ + // Dashboard Menu + { + id: '1', + name: 'Dashboard', + code: 'dashboard.view', + description: 'Dashboard menu', + resource: '/dashboard', + action: 'view', + type: 'menu', + path: '/dashboard', + component: 'dashboard/index', + icon: 'DashboardOutlined', + sort: 1, + status: 'active', + visible: true, + }, + + // Organization & Permissions Menu + { + id: '60', + name: 'Organization & Permissions', + code: 'organization.menu', + description: 'Organization and permissions root menu', + resource: '/organization', + action: '*', + type: 'menu', + path: '/organization', + component: 'Layout', + icon: 'TeamOutlined', + sort: 2, + status: 'active', + visible: true, + children: [ + { + id: '50', + name: 'Department Management', + code: 'system.dept.view', + description: 'Department management menu', + resource: '/organization/dept', + action: 'view', + type: 'menu', + parentId: '60', + path: '/organization/dept', + component: 'system/dept/index', + icon: 'ApartmentOutlined', + sort: 1, + status: 'active', + visible: true, + children: [ + { + id: '51', + name: 'Create Department', + code: 'system.dept.create', + description: 'Can create department', + resource: 'system.dept', + action: 'create', + type: 'button', + parentId: '50', + status: 'active', + visible: true, + }, + { + id: '52', + name: 'Edit Department', + code: 'system.dept.edit', + description: 'Can edit department', + resource: 'system.dept', + action: 'edit', + type: 'button', + parentId: '50', + status: 'active', + visible: true, + }, + { + id: '53', + name: 'Delete Department', + code: 'system.dept.delete', + description: 'Can delete department', + resource: 'system.dept', + action: 'delete', + type: 'button', + parentId: '50', + status: 'active', + visible: true, + }, + ], + }, + { + id: '11', + name: 'User Management', + code: 'system.user.view', + description: 'User management menu', + resource: '/organization/user', + action: 'view', + type: 'menu', + parentId: '60', + path: '/organization/user', + component: 'system/user/index', + icon: 'UserOutlined', + sort: 2, + status: 'active', + visible: true, + children: [ + { + id: '12', + name: 'Create User', + code: 'system.user.create', + description: 'Can create users', + resource: 'system.user', + action: 'create', + type: 'button', + parentId: '11', + status: 'active', + visible: true, + }, + { + id: '13', + name: 'Edit User', + code: 'system.user.edit', + description: 'Can edit users', + resource: 'system.user', + action: 'edit', + type: 'button', + parentId: '11', + status: 'active', + visible: true, + }, + { + id: '14', + name: 'Delete User', + code: 'system.user.delete', + description: 'Can delete users', + resource: 'system.user', + action: 'delete', + type: 'button', + parentId: '11', + status: 'active', + visible: true, + }, + ], + }, + { + id: '20', + name: 'Role Management', + code: 'system.role.view', + description: 'Role management menu', + resource: '/organization/role', + action: 'view', + type: 'menu', + parentId: '60', + path: '/organization/role', + component: 'system/role/index', + icon: 'TeamOutlined', + sort: 3, + status: 'active', + visible: true, + children: [ + { + id: '21', + name: 'Create Role', + code: 'system.role.create', + description: 'Can create roles', + resource: 'system.role', + action: 'create', + type: 'button', + parentId: '20', + status: 'active', + visible: true, + }, + { + id: '22', + name: 'Edit Role', + code: 'system.role.edit', + description: 'Can edit roles', + resource: 'system.role', + action: 'edit', + type: 'button', + parentId: '20', + status: 'active', + visible: true, + }, + { + id: '23', + name: 'Delete Role', + code: 'system.role.delete', + description: 'Can delete roles', + resource: 'system.role', + action: 'delete', + type: 'button', + parentId: '20', + status: 'active', + visible: true, + }, + ], + }, + { + id: '30', + name: 'Menu Management', + code: 'system.permission.view', + description: 'Menu management menu', + resource: '/organization/permission', + action: 'view', + type: 'menu', + parentId: '60', + path: '/organization/permission', + component: 'system/permission/index', + icon: 'SafetyOutlined', + sort: 4, + status: 'active', + visible: true, + children: [ + { + id: '31', + name: 'Create Menu', + code: 'system.permission.create', + description: 'Can create menu', + resource: 'system.permission', + action: 'create', + type: 'button', + parentId: '30', + status: 'active', + visible: true, + }, + { + id: '32', + name: 'Edit Menu', + code: 'system.permission.edit', + description: 'Can edit menu', + resource: 'system.permission', + action: 'edit', + type: 'button', + parentId: '30', + status: 'active', + visible: true, + }, + { + id: '33', + name: 'Delete Menu', + code: 'system.permission.delete', + description: 'Can delete menu', + resource: 'system.permission', + action: 'delete', + type: 'button', + parentId: '30', + status: 'active', + visible: true, + }, + ], + }, + ], + }, + + // System Management Menu + { + id: '10', + name: 'System Management', + code: 'system.menu', + description: 'System management root menu', + resource: '/system', + action: '*', + type: 'menu', + path: '/system', + component: 'Layout', + icon: 'SettingOutlined', + sort: 3, + status: 'active', + visible: true, + children: [ + { + id: '54', + name: 'System Config', + code: 'system.config.view', + description: 'System config menu', + resource: '/system/config', + action: 'view', + type: 'menu', + parentId: '10', + path: '/system/config', + component: 'system/config/index', + icon: 'ControlOutlined', + sort: 1, + status: 'active', + visible: true, + children: [ + { + id: '55', + name: 'Create Config', + code: 'system.config.create', + description: 'Can create config', + resource: 'system.config', + action: 'create', + type: 'button', + parentId: '54', + status: 'active', + visible: true, + }, + { + id: '56', + name: 'Edit Config', + code: 'system.config.edit', + description: 'Can edit config', + resource: 'system.config', + action: 'edit', + type: 'button', + parentId: '54', + status: 'active', + visible: true, + }, + { + id: '57', + name: 'Delete Config', + code: 'system.config.delete', + description: 'Can delete config', + resource: 'system.config', + action: 'delete', + type: 'button', + parentId: '54', + status: 'active', + visible: true, + }, + ], + }, + { + id: '34', + name: 'Dictionary Management', + code: 'system.dict.view', + description: 'Dictionary management menu', + resource: '/system/dict', + action: 'view', + type: 'menu', + parentId: '10', + path: '/system/dict', + component: 'system/dict/index', + icon: 'BookOutlined', + sort: 2, + status: 'active', + visible: true, + children: [ + { + id: '35', + name: 'Create Dictionary', + code: 'system.dict.create', + description: 'Can create dictionary', + resource: 'system.dict', + action: 'create', + type: 'button', + parentId: '34', + status: 'active', + visible: true, + }, + { + id: '36', + name: 'Edit Dictionary', + code: 'system.dict.edit', + description: 'Can edit dictionary', + resource: 'system.dict', + action: 'edit', + type: 'button', + parentId: '34', + status: 'active', + visible: true, + }, + { + id: '37', + name: 'Delete Dictionary', + code: 'system.dict.delete', + description: 'Can delete dictionary', + resource: 'system.dict', + action: 'delete', + type: 'button', + parentId: '34', + status: 'active', + visible: true, + }, + ], + }, + { + id: '58', + name: 'File Management', + code: 'system.file.view', + description: 'File management menu', + resource: '/system/file', + action: 'view', + type: 'menu', + parentId: '10', + path: '/system/file', + component: 'system/file/index', + icon: 'FolderOutlined', + sort: 3, + status: 'active', + visible: true, + children: [ + { + id: '59', + name: 'Delete File', + code: 'system.file.delete', + description: 'Can delete file', + resource: 'system.file', + action: 'delete', + type: 'button', + parentId: '58', + status: 'active', + visible: true, + }, + ], + }, + { + id: '38', + name: 'System Log', + code: 'system.log.view', + description: 'System log menu', + resource: '/system/log', + action: 'view', + type: 'menu', + parentId: '10', + path: '/system/log', + component: 'system/log/index', + icon: 'FileTextOutlined', + sort: 4, + status: 'active', + visible: true, + children: [ + { + id: '39', + name: 'Clear Log', + code: 'system.log.clear', + description: 'Can clear logs', + resource: 'system.log', + action: 'delete', + type: 'button', + parentId: '38', + status: 'active', + visible: true, + }, + ], + }, + ], + }, + + // Examples Menu + { + id: '40', + name: 'Examples', + code: 'examples.menu', + description: 'Examples root menu', + resource: '/examples', + action: '*', + type: 'menu', + path: '/examples', + component: 'Layout', + icon: 'AppstoreOutlined', + sort: 4, + status: 'active', + visible: true, + children: [ + { + id: '41', + name: 'Table Example', + code: 'examples.table.view', + description: 'Table example menu', + resource: '/examples/table', + action: 'view', + type: 'menu', + parentId: '40', + path: '/examples/table', + component: 'examples/table/index', + icon: 'TableOutlined', + sort: 1, + status: 'active', + visible: true, + }, + { + id: '42', + name: 'Icon Example', + code: 'examples.icon.view', + description: 'Icon example menu', + resource: '/examples/icon', + action: 'view', + type: 'menu', + parentId: '40', + path: '/examples/icon', + component: 'examples/icon/index', + icon: 'SmileOutlined', + sort: 2, + status: 'active', + visible: true, + }, + { + id: '43', + name: 'Form Example', + code: 'examples.form.view', + description: 'Form example menu', + resource: '/examples/form', + action: 'view', + type: 'menu', + parentId: '40', + path: '/examples/form', + component: 'examples/form/index', + icon: 'FormOutlined', + sort: 3, + status: 'active', + visible: true, + }, + { + id: '44', + name: 'Modal Example', + code: 'examples.modal.view', + description: 'Modal example menu', + resource: '/examples/modal', + action: 'view', + type: 'menu', + parentId: '40', + path: '/examples/modal', + component: 'examples/modal/index', + icon: 'ExpandOutlined', + sort: 4, + status: 'active', + visible: true, + }, + { + id: '45', + name: 'Watermark Example', + code: 'examples.watermark.view', + description: 'Watermark example menu', + resource: '/examples/watermark', + action: 'view', + type: 'menu', + parentId: '40', + path: '/examples/watermark', + component: 'examples/watermark/index', + icon: 'HighlightOutlined', + sort: 5, + status: 'active', + visible: true, + }, + { + id: '46', + name: 'Exception Page', + code: 'examples.exception.menu', + description: 'Exception root menu', + resource: '/examples/exception', + action: 'view', + type: 'menu', + parentId: '40', + path: '/examples/exception', + component: 'RouteView', + icon: 'WarningOutlined', + sort: 6, + status: 'active', + visible: true, + children: [ + { + id: '47', + name: '403', + code: 'examples.exception.403.view', + description: '403 exception page menu', + resource: '/examples/exception/403', + action: 'view', + type: 'menu', + parentId: '46', + path: '/examples/exception/403', + component: 'examples/exception/403', + icon: 'StopOutlined', + sort: 1, + status: 'active', + visible: true, + }, + { + id: '48', + name: '404', + code: 'examples.exception.404.view', + description: '404 exception page menu', + resource: '/examples/exception/404', + action: 'view', + type: 'menu', + parentId: '46', + path: '/examples/exception/404', + component: 'examples/exception/404', + icon: 'FileUnknownOutlined', + sort: 2, + status: 'active', + visible: true, + }, + { + id: '49', + name: '500', + code: 'examples.exception.500.view', + description: '500 exception page menu', + resource: '/examples/exception/500', + action: 'view', + type: 'menu', + parentId: '46', + path: '/examples/exception/500', + component: 'examples/exception/500', + icon: 'BugOutlined', + sort: 3, + status: 'active', + visible: true, + }, + ], + }, + ], + }, +]; diff --git a/antdv-next-admin/mock/data/roles.data.ts b/antdv-next-admin/mock/data/roles.data.ts new file mode 100644 index 0000000..fcde9dd --- /dev/null +++ b/antdv-next-admin/mock/data/roles.data.ts @@ -0,0 +1,40 @@ +import type { Role } from '@/types/auth'; + +export const mockRoles: Role[] = [ + { + id: '1', + name: 'Administrator', + code: 'admin', + description: 'System administrator with full access', + permissions: [], + createdAt: '2023-01-01T00:00:00.000Z', + updatedAt: '2023-01-01T00:00:00.000Z', + }, + { + id: '2', + name: 'Manager', + code: 'manager', + description: 'Department manager with management permissions', + permissions: [], + createdAt: '2023-01-01T00:00:00.000Z', + updatedAt: '2023-01-01T00:00:00.000Z', + }, + { + id: '3', + name: 'User', + code: 'user', + description: 'Regular user with basic permissions', + permissions: [], + createdAt: '2023-01-01T00:00:00.000Z', + updatedAt: '2023-01-01T00:00:00.000Z', + }, + { + id: '4', + name: 'Guest', + code: 'guest', + description: 'Guest user with read-only access', + permissions: [], + createdAt: '2023-01-01T00:00:00.000Z', + updatedAt: '2023-01-01T00:00:00.000Z', + }, +]; diff --git a/antdv-next-admin/mock/data/users.data.ts b/antdv-next-admin/mock/data/users.data.ts new file mode 100644 index 0000000..b0f6fc9 --- /dev/null +++ b/antdv-next-admin/mock/data/users.data.ts @@ -0,0 +1,103 @@ +import type { User } from "@/types/auth"; + +import { faker } from "@faker-js/faker"; + +// Generate mock users +export const mockUsers: User[] = Array.from({ length: 50 }, () => ({ + id: faker.string.uuid(), + username: faker.internet.username(), + email: faker.internet.email(), + realName: faker.person.fullName(), + avatar: faker.image.avatar(), + phone: `1${faker.string.numeric(10)}`, + gender: faker.helpers.arrayElement(["male", "female"] as const), + birthDate: faker.date + .birthdate({ min: 18, max: 65, mode: "age" }) + .toISOString() + .split("T")[0], + bio: faker.person.bio(), + status: faker.helpers.arrayElement(["active", "inactive"] as const), + createdAt: faker.date.past().toISOString(), + updatedAt: faker.date.recent().toISOString(), + roles: [], + permissions: [], +})); + +// Admin user +export const adminUser: User = { + id: "1", + username: "admin", + email: "admin@example.com", + realName: "Administrator", + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=admin", + phone: "13800138000", + gender: "male", + birthDate: "1990-01-01", + bio: "System Administrator", + status: "active", + createdAt: "2023-01-01T00:00:00.000Z", + updatedAt: new Date().toISOString(), + roles: [ + { + id: "1", + name: "Administrator", + code: "admin", + description: "System Administrator", + permissions: [], + createdAt: "2023-01-01T00:00:00.000Z", + updatedAt: "2023-01-01T00:00:00.000Z", + }, + ], + permissions: [ + { + id: "1", + name: "All Permissions", + code: "*", + description: "Has all permissions", + resource: "*", + action: "*", + type: "api", + }, + ], +}; + +// Regular user +export const regularUser: User = { + id: "2", + username: "user", + email: "user@example.com", + realName: "Regular User", + avatar: "https://api.dicebear.com/7.x/avataaars/svg?seed=user", + phone: "13800138001", + gender: "female", + birthDate: "1995-05-15", + bio: "Regular User", + status: "active", + createdAt: "2023-01-01T00:00:00.000Z", + updatedAt: new Date().toISOString(), + roles: [ + { + id: "2", + name: "User", + code: "user", + description: "Regular User", + permissions: [], + createdAt: "2023-01-01T00:00:00.000Z", + updatedAt: "2023-01-01T00:00:00.000Z", + }, + ], + permissions: [ + { + id: "2", + name: "View Dashboard", + code: "dashboard.view", + description: "Can view dashboard", + resource: "dashboard", + action: "view", + type: "menu", + }, + ], +}; + +// Add admin and regular users to the beginning of the array +mockUsers.unshift(adminUser, regularUser); diff --git a/antdv-next-admin/mock/handlers/auth.mock.ts b/antdv-next-admin/mock/handlers/auth.mock.ts new file mode 100644 index 0000000..9da056c --- /dev/null +++ b/antdv-next-admin/mock/handlers/auth.mock.ts @@ -0,0 +1,113 @@ +import { defineMock } from 'vite-plugin-mock-dev-server'; + +import { adminUser, regularUser } from '../data/users.data'; + +export default defineMock([ + // Login + { + url: '/api/auth/login', + method: 'POST', + body: (req) => { + const { username, password } = req.body; + + // Validate credentials + let user = null; + if (username === 'admin' && password === '123456') { + user = adminUser; + } else if (username === 'user' && password === '123456') { + user = regularUser; + } + + if (user) { + return { + code: 200, + message: 'Login successful', + data: { + token: `mock-token-${user.id}-${Date.now()}`, + refreshToken: `mock-refresh-token-${user.id}-${Date.now()}`, + expiresIn: 7200, + }, + success: true, + }; + } else { + return { + code: 401, + message: 'Invalid username or password', + data: null, + success: false, + }; + } + }, + }, + + // Logout + { + url: '/api/auth/logout', + method: 'POST', + body: { + code: 200, + message: 'Logout successful', + data: null, + success: true, + }, + }, + + // Get user info + { + url: '/api/auth/info', + method: 'GET', + body: (req) => { + // Get token from header + const token = req.headers.authorization?.replace('Bearer ', ''); + + if (!token) { + return { + code: 401, + message: 'Unauthorized', + data: null, + success: false, + }; + } + + // Extract user ID from token + const userId = token.split('-')[2]; + const user = userId === '1' ? adminUser : regularUser; + + return { + code: 200, + message: 'Success', + data: user, + success: true, + }; + }, + }, + + // Refresh token + { + url: '/api/auth/refresh', + method: 'POST', + body: (req) => { + const { refreshToken } = req.body; + + if (refreshToken) { + return { + code: 200, + message: 'Token refreshed', + data: { + token: `new-mock-token-${Date.now()}`, + refreshToken: `new-mock-refresh-token-${Date.now()}`, + expiresIn: 7200, + }, + success: true, + }; + } else { + return { + code: 401, + message: 'Invalid refresh token', + data: null, + success: false, + }; + } + }, + }, +]); diff --git a/antdv-next-admin/mock/handlers/config.mock.ts b/antdv-next-admin/mock/handlers/config.mock.ts new file mode 100644 index 0000000..3c77530 --- /dev/null +++ b/antdv-next-admin/mock/handlers/config.mock.ts @@ -0,0 +1,114 @@ +import type { SysConfig } from "@/types/config"; + +import { defineMock } from "vite-plugin-mock-dev-server"; + +import { sysConfigs } from "../data/config.data"; + +export default defineMock([ + { + url: "/api/config/list", + method: "GET", + body: (req) => { + const { name, key, group, page = 1, pageSize = 20 } = req.query; + let filtered = [...sysConfigs]; + + if (name) + filtered = filtered.filter((item) => + item.name.includes(name as string), + ); + if (key) + filtered = filtered.filter((item) => item.key.includes(key as string)); + if (group) filtered = filtered.filter((item) => item.group === group); + + filtered.sort((a, b) => a.sort - b.sort); + const start = (Number(page) - 1) * Number(pageSize); + const list = filtered.slice(start, start + Number(pageSize)); + + return { + code: 200, + message: "success", + success: true, + data: { + list, + total: filtered.length, + current: Number(page), + pageSize: Number(pageSize), + }, + }; + }, + }, + + { + url: "/api/config/key/:key", + method: "GET", + body: (req) => { + const item = sysConfigs.find((c) => c.key === req.params.key); + return item + ? { code: 200, message: "success", success: true, data: item } + : { code: 404, message: "Config not found", success: false }; + }, + }, + + { + url: "/api/config", + method: "POST", + body: (req) => { + const exists = sysConfigs.find((c) => c.key === req.body.key); + if (exists) + return { + code: 400, + message: "Config key already exists", + success: false, + }; + const newConfig: SysConfig = { + id: String(Date.now()), + ...req.body, + builtIn: false, + createTime: new Date().toISOString().replace("T", " ").slice(0, 19), + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + sysConfigs.push(newConfig); + return { code: 200, message: "success", success: true, data: newConfig }; + }, + }, + + { + url: "/api/config/:id", + method: "PUT", + body: (req) => { + const index = sysConfigs.findIndex((item) => item.id === req.params.id); + if (index !== -1) { + sysConfigs[index] = { + ...sysConfigs[index], + ...req.body, + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + return { + code: 200, + message: "success", + success: true, + data: sysConfigs[index], + }; + } + return { code: 404, message: "Config not found", success: false }; + }, + }, + + { + url: "/api/config/:id", + method: "DELETE", + body: (req) => { + const index = sysConfigs.findIndex((item) => item.id === req.params.id); + if (index === -1) + return { code: 404, message: "Config not found", success: false }; + if (sysConfigs[index].builtIn) + return { + code: 400, + message: "Built-in config cannot be deleted", + success: false, + }; + sysConfigs.splice(index, 1); + return { code: 200, message: "success", success: true }; + }, + }, +]); diff --git a/antdv-next-admin/mock/handlers/dashboard.mock.ts b/antdv-next-admin/mock/handlers/dashboard.mock.ts new file mode 100644 index 0000000..6e762df --- /dev/null +++ b/antdv-next-admin/mock/handlers/dashboard.mock.ts @@ -0,0 +1,71 @@ +import { defineMock } from 'vite-plugin-mock-dev-server'; + +import { + mockStats, + mockSalesTrend, + mockUserDistribution, + mockActivities, + mockChartData, +} from '../data/dashboard.data'; + +export default defineMock([ + // Get statistics + { + url: '/api/dashboard/stats', + method: 'GET', + body: { + code: 200, + message: 'Success', + data: mockStats, + success: true, + }, + }, + + // Get sales trend + { + url: '/api/dashboard/sales-trend', + method: 'GET', + body: { + code: 200, + message: 'Success', + data: mockSalesTrend, + success: true, + }, + }, + + // Get user distribution + { + url: '/api/dashboard/user-distribution', + method: 'GET', + body: { + code: 200, + message: 'Success', + data: mockUserDistribution, + success: true, + }, + }, + + // Get recent activities + { + url: '/api/dashboard/activities', + method: 'GET', + body: { + code: 200, + message: 'Success', + data: mockActivities, + success: true, + }, + }, + + // Get chart data + { + url: '/api/dashboard/chart-data', + method: 'GET', + body: { + code: 200, + message: 'Success', + data: mockChartData, + success: true, + }, + }, +]); diff --git a/antdv-next-admin/mock/handlers/dept.mock.ts b/antdv-next-admin/mock/handlers/dept.mock.ts new file mode 100644 index 0000000..3bda50a --- /dev/null +++ b/antdv-next-admin/mock/handlers/dept.mock.ts @@ -0,0 +1,121 @@ +import type { Department } from "@/types/dept"; + +import { defineMock } from "vite-plugin-mock-dev-server"; + +import { departments, buildDeptTree } from "../data/dept.data"; + +export default defineMock([ + // 获取部门树 + { + url: "/api/dept/tree", + method: "GET", + body: (req) => { + const { name, status } = req.query; + let filtered = [...departments]; + + if (name) { + filtered = filtered.filter((item) => + item.name.includes(name as string), + ); + } + if (status) { + filtered = filtered.filter((item) => item.status === status); + } + + return { + code: 200, + message: "success", + success: true, + data: buildDeptTree(filtered), + }; + }, + }, + + // 获取部门列表(扁平) + { + url: "/api/dept/list", + method: "GET", + body: (req) => { + const { name, status } = req.query; + let filtered = [...departments]; + + if (name) { + filtered = filtered.filter((item) => + item.name.includes(name as string), + ); + } + if (status) { + filtered = filtered.filter((item) => item.status === status); + } + + filtered.sort((a, b) => a.sort - b.sort); + + return { + code: 200, + message: "success", + success: true, + data: filtered, + }; + }, + }, + + // 创建部门 + { + url: "/api/dept", + method: "POST", + body: (req) => { + const newDept: Department = { + id: String(Date.now()), + ...req.body, + createTime: new Date().toISOString().replace("T", " ").slice(0, 19), + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + departments.push(newDept); + return { code: 200, message: "创建成功", success: true, data: newDept }; + }, + }, + + // 更新部门 + { + url: "/api/dept/:id", + method: "PUT", + body: (req) => { + const { id } = req.params; + const index = departments.findIndex((item) => item.id === id); + if (index !== -1) { + departments[index] = { + ...departments[index], + ...req.body, + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + return { + code: 200, + message: "更新成功", + success: true, + data: departments[index], + }; + } + return { code: 404, message: "部门不存在", success: false }; + }, + }, + + // 删除部门 + { + url: "/api/dept/:id", + method: "DELETE", + body: (req) => { + const { id } = req.params; + // 检查是否有子部门 + const hasChildren = departments.some((item) => item.parentId === id); + if (hasChildren) { + return { code: 400, message: "存在子部门,无法删除", success: false }; + } + const index = departments.findIndex((item) => item.id === id); + if (index !== -1) { + departments.splice(index, 1); + return { code: 200, message: "删除成功", success: true }; + } + return { code: 404, message: "部门不存在", success: false }; + }, + }, +]); diff --git a/antdv-next-admin/mock/handlers/dict.mock.ts b/antdv-next-admin/mock/handlers/dict.mock.ts new file mode 100644 index 0000000..867f160 --- /dev/null +++ b/antdv-next-admin/mock/handlers/dict.mock.ts @@ -0,0 +1,289 @@ +import type { DictType, DictData } from "@/types/dict"; + +import { defineMock } from "vite-plugin-mock-dev-server"; + +import { dictTypes, dictData } from "../data/dict.data"; + +export default defineMock([ + // 获取所有字典类型 + { + url: "/api/dict/types", + method: "GET", + body: () => { + return { + code: 200, + message: "success", + success: true, + data: dictTypes, + }; + }, + }, + + // 获取字典类型列表(分页) + { + url: "/api/dict/type/list", + method: "GET", + body: (req) => { + const { name, code, status, page = 1, pageSize = 10 } = req.query; + + let filtered = [...dictTypes]; + + if (name) { + filtered = filtered.filter((item) => + item.name.includes(name as string), + ); + } + if (code) { + filtered = filtered.filter((item) => + item.code.includes(code as string), + ); + } + if (status) { + filtered = filtered.filter((item) => item.status === status); + } + + const start = (Number(page) - 1) * Number(pageSize); + const end = start + Number(pageSize); + const list = filtered.slice(start, end); + + return { + code: 200, + message: "success", + success: true, + data: { + list, + total: filtered.length, + current: Number(page), + pageSize: Number(pageSize), + }, + }; + }, + }, + + // 创建字典类型 + { + url: "/api/dict/type", + method: "POST", + body: (req) => { + const newType: DictType = { + id: String(Date.now()), + ...req.body, + createTime: new Date().toISOString(), + updateTime: new Date().toISOString(), + }; + dictTypes.push(newType); + return { + code: 200, + message: "创建成功", + success: true, + data: newType, + }; + }, + }, + + // 更新字典类型 + { + url: "/api/dict/type/:id", + method: "PUT", + body: (req) => { + const { id } = req.params; + const index = dictTypes.findIndex((item) => item.id === id); + if (index !== -1) { + dictTypes[index] = { + ...dictTypes[index], + ...req.body, + updateTime: new Date().toISOString(), + }; + return { + code: 200, + message: "更新成功", + success: true, + data: dictTypes[index], + }; + } + return { + code: 404, + message: "字典类型不存在", + success: false, + }; + }, + }, + + // 删除字典类型 + { + url: "/api/dict/type/:id", + method: "DELETE", + body: (req) => { + const { id } = req.params; + const index = dictTypes.findIndex((item) => item.id === id); + if (index !== -1) { + dictTypes.splice(index, 1); + return { + code: 200, + message: "删除成功", + success: true, + }; + } + return { + code: 404, + message: "字典类型不存在", + success: false, + }; + }, + }, + + // 获取所有字典数据 + { + url: "/api/dict/data/all", + method: "GET", + body: () => { + return { + code: 200, + message: "success", + success: true, + data: dictData, + }; + }, + }, + + // 获取字典数据列表(分页) - 必须在 :typeCode 之前,避免被参数路由匹配 + { + url: "/api/dict/data/list", + method: "GET", + body: (req) => { + const { + typeCode, + label, + value, + status, + page = 1, + pageSize = 10, + } = req.query; + + let filtered = [...dictData]; + + if (typeCode) { + filtered = filtered.filter((item) => item.typeCode === typeCode); + } + if (label) { + filtered = filtered.filter((item) => + item.label.includes(label as string), + ); + } + if (value) { + filtered = filtered.filter((item) => + item.value.includes(value as string), + ); + } + if (status) { + filtered = filtered.filter((item) => item.status === status); + } + + const start = (Number(page) - 1) * Number(pageSize); + const end = start + Number(pageSize); + const list = filtered.slice(start, end); + + return { + code: 200, + message: "success", + success: true, + data: { + list, + total: filtered.length, + current: Number(page), + pageSize: Number(pageSize), + }, + }; + }, + }, + + // 根据类型获取字典数据 + { + url: "/api/dict/data/:typeCode", + method: "GET", + body: (req) => { + const { typeCode } = req.params; + const filtered = dictData.filter( + (item) => item.typeCode === typeCode && item.status === "enabled", + ); + return { + code: 200, + message: "success", + success: true, + data: filtered, + }; + }, + }, + + // 创建字典数据 + { + url: "/api/dict/data", + method: "POST", + body: (req) => { + const newData: DictData = { + id: String(Date.now()), + ...req.body, + createTime: new Date().toISOString(), + updateTime: new Date().toISOString(), + }; + dictData.push(newData); + return { + code: 200, + message: "创建成功", + success: true, + data: newData, + }; + }, + }, + + // 更新字典数据 + { + url: "/api/dict/data/:id", + method: "PUT", + body: (req) => { + const { id } = req.params; + const index = dictData.findIndex((item) => item.id === id); + if (index !== -1) { + dictData[index] = { + ...dictData[index], + ...req.body, + updateTime: new Date().toISOString(), + }; + return { + code: 200, + message: "更新成功", + success: true, + data: dictData[index], + }; + } + return { + code: 404, + message: "字典数据不存在", + success: false, + }; + }, + }, + + // 删除字典数据 + { + url: "/api/dict/data/:id", + method: "DELETE", + body: (req) => { + const { id } = req.params; + const index = dictData.findIndex((item) => item.id === id); + if (index !== -1) { + dictData.splice(index, 1); + return { + code: 200, + message: "删除成功", + success: true, + }; + } + return { + code: 404, + message: "字典数据不存在", + success: false, + }; + }, + }, +]); diff --git a/antdv-next-admin/mock/handlers/file.mock.ts b/antdv-next-admin/mock/handlers/file.mock.ts new file mode 100644 index 0000000..f4cde5c --- /dev/null +++ b/antdv-next-admin/mock/handlers/file.mock.ts @@ -0,0 +1,96 @@ +import { defineMock } from "vite-plugin-mock-dev-server"; + +import { sysFiles } from "../data/file.data"; + +export default defineMock([ + { + url: "/api/file/list", + method: "GET", + body: (req) => { + const { name, ext, storage, page = 1, pageSize = 20 } = req.query; + let filtered = [...sysFiles]; + + if (name) + filtered = filtered.filter((item) => + item.originalName.includes(name as string), + ); + if (ext) filtered = filtered.filter((item) => item.ext === ext); + if (storage) + filtered = filtered.filter((item) => item.storage === storage); + + const start = (Number(page) - 1) * Number(pageSize); + const list = filtered.slice(start, start + Number(pageSize)); + + return { + code: 200, + message: "success", + success: true, + data: { + list, + total: filtered.length, + current: Number(page), + pageSize: Number(pageSize), + }, + }; + }, + }, + + { + url: "/api/file/:id", + method: "GET", + body: (req) => { + const file = sysFiles.find((item) => item.id === req.params.id); + if (!file) return { code: 404, message: "文件不存在", success: false }; + return { code: 200, message: "success", success: true, data: file }; + }, + }, + + { + url: "/api/file/upload", + method: "POST", + body: (req) => { + const { originalName, size, mimeType, storage = "local" } = req.body; + + if (!originalName) { + return { code: 400, message: "文件名不能为空", success: false }; + } + + const ext = originalName.includes(".") + ? originalName.split(".").pop() + : ""; + const newFile = { + id: `file-${Date.now()}`, + originalName, + storedName: `${Date.now()}-${originalName}`, + size: size || 0, + ext: ext || "", + mimeType: mimeType || "application/octet-stream", + storage, + url: `/uploads/${Date.now()}-${originalName}`, + uploader: "admin", + uploadTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + + sysFiles.unshift(newFile); + + return { + code: 200, + message: "上传成功", + success: true, + data: newFile, + }; + }, + }, + + { + url: "/api/file/:id", + method: "DELETE", + body: (req) => { + const index = sysFiles.findIndex((item) => item.id === req.params.id); + if (index === -1) + return { code: 404, message: "文件不存在", success: false }; + sysFiles.splice(index, 1); + return { code: 200, message: "删除成功", success: true }; + }, + }, +]); diff --git a/antdv-next-admin/mock/handlers/log.mock.ts b/antdv-next-admin/mock/handlers/log.mock.ts new file mode 100644 index 0000000..e380fdf --- /dev/null +++ b/antdv-next-admin/mock/handlers/log.mock.ts @@ -0,0 +1,139 @@ +import { defineMock } from "vite-plugin-mock-dev-server"; + +import { operationLogs, loginLogs } from "../data/log.data"; + +export default defineMock([ + { + url: "/api/log/operation/list", + method: "GET", + body: (req) => { + const { + username, + module, + action, + status, + startTime, + endTime, + page = 1, + pageSize = 10, + } = req.query; + + let filtered = [...operationLogs]; + + if (username) { + filtered = filtered.filter((item) => + item.username.includes(username as string), + ); + } + if (module) { + filtered = filtered.filter((item) => item.module === module); + } + if (action) { + filtered = filtered.filter((item) => item.action === action); + } + if (status) { + filtered = filtered.filter((item) => item.status === status); + } + if (startTime) { + filtered = filtered.filter( + (item) => item.createTime >= (startTime as string), + ); + } + if (endTime) { + filtered = filtered.filter( + (item) => item.createTime <= (endTime as string), + ); + } + + const start = (Number(page) - 1) * Number(pageSize); + const end = start + Number(pageSize); + const list = filtered.slice(start, end); + + return { + code: 200, + message: "success", + success: true, + data: { + list, + total: filtered.length, + current: Number(page), + pageSize: Number(pageSize), + }, + }; + }, + }, + + { + url: "/api/log/login/list", + method: "GET", + body: (req) => { + const { + username, + ip, + status, + startTime, + endTime, + page = 1, + pageSize = 10, + } = req.query; + + let filtered = [...loginLogs]; + + if (username) { + filtered = filtered.filter((item) => + item.username.includes(username as string), + ); + } + if (ip) { + filtered = filtered.filter((item) => item.ip.includes(ip as string)); + } + if (status) { + filtered = filtered.filter((item) => item.status === status); + } + if (startTime) { + filtered = filtered.filter( + (item) => item.createTime >= (startTime as string), + ); + } + if (endTime) { + filtered = filtered.filter( + (item) => item.createTime <= (endTime as string), + ); + } + + const start = (Number(page) - 1) * Number(pageSize); + const end = start + Number(pageSize); + const list = filtered.slice(start, end); + + return { + code: 200, + message: "success", + success: true, + data: { + list, + total: filtered.length, + current: Number(page), + pageSize: Number(pageSize), + }, + }; + }, + }, + + { + url: "/api/log/operation/clear", + method: "DELETE", + body: () => { + operationLogs.length = 0; + return { code: 200, message: "success", success: true }; + }, + }, + + { + url: "/api/log/login/clear", + method: "DELETE", + body: () => { + loginLogs.length = 0; + return { code: 200, message: "success", success: true }; + }, + }, +]); diff --git a/antdv-next-admin/mock/handlers/permission.mock.ts b/antdv-next-admin/mock/handlers/permission.mock.ts new file mode 100644 index 0000000..bf293b3 --- /dev/null +++ b/antdv-next-admin/mock/handlers/permission.mock.ts @@ -0,0 +1,342 @@ +import type { Permission } from '@/types/auth'; + +import { faker } from '@faker-js/faker'; +import { defineMock } from 'vite-plugin-mock-dev-server'; + +import { mockPermissions } from '../data/permissions.data'; + +const permissionStore: Permission[] = JSON.parse(JSON.stringify(mockPermissions)); + +const deepClone = (value: T): T => JSON.parse(JSON.stringify(value)); + +function findPermissionById( + permissions: Permission[], + id: string, + parent: Permission | null = null, +): { permission: Permission | null; parent: Permission | null } { + for (const permission of permissions) { + if (permission.id === id) { + return { permission, parent }; + } + + if (permission.children && permission.children.length > 0) { + const result = findPermissionById(permission.children, id, permission); + if (result.permission) { + return result; + } + } + } + + return { permission: null, parent: null }; +} + +function removePermissionById(permissions: Permission[], id: string): boolean { + const index = permissions.findIndex((permission) => permission.id === id); + if (index !== -1) { + permissions.splice(index, 1); + return true; + } + + return permissions.some((permission) => { + if (!permission.children || permission.children.length === 0) { + return false; + } + + const removed = removePermissionById(permission.children, id); + if (removed && permission.children.length === 0) { + delete permission.children; + } + return removed; + }); +} + +function appendPermission( + permissions: Permission[], + permission: Permission, + parentId?: string, +): boolean { + if (!parentId) { + permissions.push(permission); + return true; + } + + const { permission: parentPermission } = findPermissionById(permissions, parentId); + if (!parentPermission) { + return false; + } + + if (!parentPermission.children) { + parentPermission.children = []; + } + parentPermission.children.push(permission); + return true; +} + +function filterPermissionTree( + permissions: Permission[], + keyword?: string, + type?: string, + status?: string, +): Permission[] { + const normalizedKeyword = keyword?.toLowerCase().trim(); + + return permissions.reduce((result, permission) => { + const children = permission.children + ? filterPermissionTree(permission.children, keyword, type, status) + : []; + + const matchedKeyword = + !normalizedKeyword || + permission.name.toLowerCase().includes(normalizedKeyword) || + String(permission.code || '') + .toLowerCase() + .includes(normalizedKeyword) || + (permission.path || '').toLowerCase().includes(normalizedKeyword); + + const matchedType = !type || permission.type === type; + const matchedStatus = !status || (permission.status || 'active') === status; + const matchedSelf = matchedKeyword && matchedType && matchedStatus; + + if (matchedSelf || children.length > 0) { + result.push({ + ...permission, + children: children.length > 0 ? children : undefined, + }); + } + + return result; + }, []); +} + +function normalizeQueryValue(value: unknown): string | undefined { + if (Array.isArray(value)) { + return normalizeQueryValue(value[0]); + } + + if (typeof value !== 'string') { + return undefined; + } + + const trimmed = value.trim(); + return trimmed ? trimmed : undefined; +} + +export default defineMock([ + // Get permission list (tree structure) + { + url: '/api/permissions', + method: 'GET', + body: (req) => { + const query = req.query || {}; + const keyword = normalizeQueryValue(query.keyword); + const type = normalizeQueryValue(query.type); + const status = normalizeQueryValue(query.status); + const filtered = filterPermissionTree(permissionStore, keyword, type, status); + + return { + code: 200, + message: 'Success', + data: deepClone(filtered), + success: true, + }; + }, + }, + + // Get permission tree (for menu) + { + url: '/api/permissions/tree', + method: 'GET', + body: () => { + return { + code: 200, + message: 'Success', + data: deepClone(permissionStore), + success: true, + }; + }, + }, + + // Get permission by ID + { + url: '/api/permissions/:id', + method: 'GET', + body: (req) => { + const { id } = req.params; + const { permission } = findPermissionById(permissionStore, id); + + if (!permission) { + return { + code: 404, + message: 'Permission not found', + data: null, + success: false, + }; + } + + return { + code: 200, + message: 'Success', + data: deepClone(permission), + success: true, + }; + }, + }, + + // Create permission + { + url: '/api/permissions', + method: 'POST', + body: (req) => { + const payload = req.body || {}; + const permission: Permission = { + id: faker.string.uuid(), + name: payload.name, + code: payload.code, + description: payload.description || '', + resource: payload.resource || payload.path || payload.code, + action: payload.action || (payload.type === 'menu' ? 'view' : '*'), + type: payload.type || 'menu', + parentId: payload.parentId, + path: payload.path, + component: payload.component, + icon: payload.icon, + sort: payload.sort ?? 0, + status: payload.status || 'active', + visible: payload.visible ?? true, + children: payload.children && payload.children.length > 0 ? payload.children : undefined, + }; + + const appended = appendPermission(permissionStore, permission, payload.parentId); + if (!appended) { + return { + code: 400, + message: 'Parent permission not found', + data: null, + success: false, + }; + } + + return { + code: 200, + message: 'Permission created successfully', + data: deepClone(permission), + success: true, + }; + }, + }, + + // Update permission + { + url: '/api/permissions/:id', + method: 'PUT', + body: (req) => { + const { id } = req.params; + const payload = req.body || {}; + const { permission, parent } = findPermissionById(permissionStore, id); + + if (!permission) { + return { + code: 404, + message: 'Permission not found', + data: null, + success: false, + }; + } + + if (payload.parentId !== undefined && payload.parentId !== permission.parentId) { + const movedPermission = deepClone(permission); + removePermissionById(permissionStore, id); + movedPermission.parentId = payload.parentId; + movedPermission.children = permission.children || []; + const appended = appendPermission(permissionStore, movedPermission, payload.parentId); + if (!appended) { + appendPermission(permissionStore, movedPermission, parent?.id); + return { + code: 400, + message: 'Parent permission not found', + data: null, + success: false, + }; + } + } + + const { permission: nextPermission } = findPermissionById(permissionStore, id); + if (!nextPermission) { + return { + code: 404, + message: 'Permission not found', + data: null, + success: false, + }; + } + + const children = nextPermission.children; + Object.assign(nextPermission, payload, { children }); + + return { + code: 200, + message: 'Permission updated successfully', + data: deepClone(nextPermission), + success: true, + }; + }, + }, + + // Delete permission + { + url: '/api/permissions/:id', + method: 'DELETE', + body: (req) => { + const { id } = req.params; + const removed = removePermissionById(permissionStore, id); + + if (!removed) { + return { + code: 404, + message: 'Permission not found', + data: null, + success: false, + }; + } + + return { + code: 200, + message: 'Permission deleted successfully', + data: null, + success: true, + }; + }, + }, + + // Get user permissions + { + url: '/api/permissions/user', + method: 'GET', + body: (req) => { + // In a real app, this would be based on the user's roles + // For now, return all permissions for admin + const token = req.headers.authorization?.replace('Bearer ', ''); + const userId = token?.split('-')[2]; + + if (userId === '1') { + // Admin - all permissions + return { + code: 200, + message: 'Success', + data: deepClone(permissionStore), + success: true, + }; + } else { + // Regular user - limited permissions + return { + code: 200, + message: 'Success', + data: deepClone( + permissionStore.filter((permission) => permission.code === 'dashboard.view'), + ), + success: true, + }; + } + }, + }, +]); diff --git a/antdv-next-admin/mock/handlers/role.mock.ts b/antdv-next-admin/mock/handlers/role.mock.ts new file mode 100644 index 0000000..631bc82 --- /dev/null +++ b/antdv-next-admin/mock/handlers/role.mock.ts @@ -0,0 +1,163 @@ +import { faker } from '@faker-js/faker'; +import { defineMock } from 'vite-plugin-mock-dev-server'; + +import { mockRoles } from '../data/roles.data'; + +export default defineMock([ + // Get role list + { + url: '/api/roles', + method: 'GET', + body: (req) => { + const { current = 1, pageSize = 10, name, code } = req.query; + + // Filter roles + let filteredRoles = [...mockRoles]; + + if (name) { + filteredRoles = filteredRoles.filter((role) => + role.name.toLowerCase().includes(name.toLowerCase()), + ); + } + + if (code) { + filteredRoles = filteredRoles.filter((role) => + role.code.toLowerCase().includes(code.toLowerCase()), + ); + } + + // Pagination + const start = (Number(current) - 1) * Number(pageSize); + const end = start + Number(pageSize); + const list = filteredRoles.slice(start, end); + + return { + code: 200, + message: 'Success', + data: { + list, + total: filteredRoles.length, + current: Number(current), + pageSize: Number(pageSize), + }, + success: true, + }; + }, + }, + + // Get role by ID + { + url: '/api/roles/:id', + method: 'GET', + body: (req) => { + const { id } = req.params; + const role = mockRoles.find((r) => r.id === id); + + if (role) { + return { + code: 200, + message: 'Success', + data: role, + success: true, + }; + } else { + return { + code: 404, + message: 'Role not found', + data: null, + success: false, + }; + } + }, + }, + + // Create role + { + url: '/api/roles', + method: 'POST', + body: (req) => { + const roleData = req.body; + + const newRole = { + id: faker.string.uuid(), + name: roleData.name, + code: roleData.code, + description: roleData.description || '', + permissions: roleData.permissions || [], + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + }; + + mockRoles.push(newRole); + + return { + code: 200, + message: 'Role created successfully', + data: newRole, + success: true, + }; + }, + }, + + // Update role + { + url: '/api/roles/:id', + method: 'PUT', + body: (req) => { + const { id } = req.params; + const roleData = req.body; + + const index = mockRoles.findIndex((r) => r.id === id); + + if (index !== -1) { + mockRoles[index] = { + ...mockRoles[index], + ...roleData, + updatedAt: new Date().toISOString(), + }; + + return { + code: 200, + message: 'Role updated successfully', + data: mockRoles[index], + success: true, + }; + } else { + return { + code: 404, + message: 'Role not found', + data: null, + success: false, + }; + } + }, + }, + + // Delete role + { + url: '/api/roles/:id', + method: 'DELETE', + body: (req) => { + const { id } = req.params; + const index = mockRoles.findIndex((r) => r.id === id); + + if (index !== -1) { + mockRoles.splice(index, 1); + + return { + code: 200, + message: 'Role deleted successfully', + data: null, + success: true, + }; + } else { + return { + code: 404, + message: 'Role not found', + data: null, + success: false, + }; + } + }, + }, +]); diff --git a/antdv-next-admin/mock/handlers/user.mock.ts b/antdv-next-admin/mock/handlers/user.mock.ts new file mode 100644 index 0000000..c138921 --- /dev/null +++ b/antdv-next-admin/mock/handlers/user.mock.ts @@ -0,0 +1,234 @@ +import { faker } from "@faker-js/faker"; +import { defineMock } from "vite-plugin-mock-dev-server"; + +import { mockUsers } from "../data/users.data"; + +export default defineMock([ + // Get user list (with pagination and search) + { + url: "/api/users", + method: "GET", + body: (req) => { + const { + current = 1, + pageSize = 10, + username, + email, + status, + gender, + } = req.query; + + // Filter users + let filteredUsers = [...mockUsers]; + + if (username) { + filteredUsers = filteredUsers.filter((user) => + user.username.toLowerCase().includes(username.toLowerCase()), + ); + } + + if (email) { + filteredUsers = filteredUsers.filter((user) => + user.email.toLowerCase().includes(email.toLowerCase()), + ); + } + + if (status) { + filteredUsers = filteredUsers.filter((user) => user.status === status); + } + + if (gender) { + const genderValues = Array.isArray(gender) + ? gender.map((item) => String(item)) + : String(gender) + .split(",") + .map((item) => item.trim()) + .filter(Boolean); + if (genderValues.length > 0) { + filteredUsers = filteredUsers.filter((user) => + genderValues.includes(String(user.gender)), + ); + } + } + + // Pagination + const start = (Number(current) - 1) * Number(pageSize); + const end = start + Number(pageSize); + const list = filteredUsers.slice(start, end); + + return { + code: 200, + message: "Success", + data: { + list, + total: filteredUsers.length, + current: Number(current), + pageSize: Number(pageSize), + }, + success: true, + }; + }, + }, + + // Get user by ID + { + url: "/api/users/:id", + method: "GET", + body: (req) => { + const { id } = req.params; + const user = mockUsers.find((u) => u.id === id); + + if (user) { + return { + code: 200, + message: "Success", + data: user, + success: true, + }; + } else { + return { + code: 404, + message: "User not found", + data: null, + success: false, + }; + } + }, + }, + + // Create user + { + url: "/api/users", + method: "POST", + body: (req) => { + const userData = req.body; + + const newUser = { + id: faker.string.uuid(), + username: userData.username || `user_${faker.string.alphanumeric(6)}`, + email: userData.email || faker.internet.email(), + realName: userData.realName || faker.person.fullName(), + avatar: userData.avatar || faker.image.avatar(), + phone: userData.phone || `1${faker.string.numeric(10)}`, + gender: userData.gender || "male", + birthDate: + userData.birthDate || + faker.date + .birthdate({ min: 18, max: 65, mode: "age" }) + .toISOString() + .split("T")[0], + bio: userData.bio || "", + status: userData.status || "active", + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + roles: userData.roles || [], + permissions: userData.permissions || [], + }; + + mockUsers.push(newUser); + + return { + code: 200, + message: "User created successfully", + data: newUser, + success: true, + }; + }, + }, + + // Update user + { + url: "/api/users/:id", + method: "PUT", + body: (req) => { + const { id } = req.params; + const userData = req.body; + + const index = mockUsers.findIndex((u) => u.id === id); + + if (index !== -1) { + mockUsers[index] = { + ...mockUsers[index], + ...userData, + updatedAt: new Date().toISOString(), + }; + + return { + code: 200, + message: "User updated successfully", + data: mockUsers[index], + success: true, + }; + } else { + return { + code: 404, + message: "User not found", + data: null, + success: false, + }; + } + }, + }, + + // Delete user + { + url: "/api/users/:id", + method: "DELETE", + body: (req) => { + const { id } = req.params; + const index = mockUsers.findIndex((u) => u.id === id); + + if (index !== -1) { + mockUsers.splice(index, 1); + + return { + code: 200, + message: "User deleted successfully", + data: null, + success: true, + }; + } else { + return { + code: 404, + message: "User not found", + data: null, + success: false, + }; + } + }, + }, + + // Batch delete users + { + url: "/api/users/batch", + method: "DELETE", + body: (req) => { + const { ids } = req.body; + + if (!ids || !Array.isArray(ids) || ids.length === 0) { + return { + code: 400, + message: "Invalid user IDs", + data: null, + success: false, + }; + } + + let deletedCount = 0; + ids.forEach((id: string) => { + const index = mockUsers.findIndex((u) => u.id === id); + if (index !== -1) { + mockUsers.splice(index, 1); + deletedCount++; + } + }); + + return { + code: 200, + message: `Deleted ${deletedCount} users successfully`, + data: { deletedCount }, + success: true, + }; + }, + }, +]); diff --git a/antdv-next-admin/package-lock.json b/antdv-next-admin/package-lock.json new file mode 100644 index 0000000..cc32760 --- /dev/null +++ b/antdv-next-admin/package-lock.json @@ -0,0 +1,8554 @@ +{ + "name": "antdv-next-admin", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "antdv-next-admin", + "version": "1.0.0", + "dependencies": { + "@ant-design/colors": "^8.0.1", + "@antdv-next/icons": "^1.0.6", + "@codemirror/autocomplete": "^6.20.1", + "@codemirror/commands": "^6.10.3", + "@codemirror/lang-css": "^6.3.1", + "@codemirror/lang-go": "^6.0.1", + "@codemirror/lang-html": "^6.4.11", + "@codemirror/lang-java": "^6.0.2", + "@codemirror/lang-javascript": "^6.2.4", + "@codemirror/lang-json": "^6.0.2", + "@codemirror/lang-markdown": "^6.5.0", + "@codemirror/lang-php": "^6.0.2", + "@codemirror/lang-python": "^6.2.1", + "@codemirror/lang-rust": "^6.0.2", + "@codemirror/lang-sql": "^6.10.0", + "@codemirror/lang-xml": "^6.1.0", + "@codemirror/lang-yaml": "^6.1.3", + "@codemirror/language": "^6.12.3", + "@codemirror/lint": "^6.9.5", + "@codemirror/search": "^6.6.0", + "@codemirror/state": "^6.6.0", + "@codemirror/theme-one-dark": "^6.1.3", + "@codemirror/view": "^6.41.0", + "@iconify-json/ion": "^1.2.6", + "@iconify-json/mdi": "^1.2.3", + "@iconify-json/ri": "^1.2.10", + "@iconify/vue": "^5.0.0", + "@milkdown/core": "^7.20.0", + "@milkdown/ctx": "^7.20.0", + "@milkdown/plugin-block": "^7.20.0", + "@milkdown/plugin-clipboard": "^7.20.0", + "@milkdown/plugin-history": "^7.20.0", + "@milkdown/plugin-listener": "^7.20.0", + "@milkdown/plugin-prism": "^7.20.0", + "@milkdown/plugin-slash": "^7.20.0", + "@milkdown/plugin-tooltip": "^7.20.0", + "@milkdown/plugin-upload": "^7.20.0", + "@milkdown/preset-commonmark": "^7.20.0", + "@milkdown/preset-gfm": "^7.20.0", + "@milkdown/theme-nord": "^7.20.0", + "@milkdown/transformer": "^7.20.0", + "@milkdown/vue": "^7.20.0", + "@tiptap/extension-image": "^3.22.1", + "@tiptap/extension-link": "^3.22.1", + "@tiptap/extension-placeholder": "^3.22.1", + "@tiptap/starter-kit": "^3.22.1", + "@tiptap/vue-3": "^3.22.1", + "@uiw/codemirror-theme-dracula": "^4.25.9", + "@uiw/codemirror-theme-github": "^4.25.9", + "@uiw/codemirror-theme-material": "^4.25.9", + "@uiw/codemirror-theme-monokai": "^4.25.9", + "@uiw/codemirror-theme-nord": "^4.25.9", + "@uiw/codemirror-theme-solarized": "^4.25.9", + "@uiw/codemirror-theme-tokyo-night": "^4.25.9", + "@uiw/codemirror-themes": "^4.25.9", + "antdv-next": "^1.1.8", + "axios": "^1.14.0", + "dayjs": "^1.11.20", + "echarts": "^6.0.0", + "lodash-es": "^4.18.1", + "pinia": "^3.0.4", + "pinyin-pro": "^3.28.0", + "vue": "^3.5.31", + "vue-codemirror": "^6.1.1", + "vue-echarts": "^8.0.1", + "vue-i18n": "^11.3.0", + "vue-router": "^5.0.4", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@faker-js/faker": "^10.4.0", + "@tailwindcss/vite": "^4.2.2", + "@types/lodash-es": "^4.17.12", + "@vitejs/plugin-vue": "^6.0.4", + "oxfmt": "^0.43.0", + "oxlint": "^1.58.0", + "sass": "^1.69.7", + "tailwindcss": "^4.2.2", + "typescript": "^6.0.2", + "vite": "^8.0.3", + "vite-plugin-mock-dev-server": "^2.1.1", + "vue-tsc": "^3.2.6" + } + }, + "node_modules/@ant-design/colors": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-8.0.1.tgz", + "integrity": "sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^3.0.0" + } + }, + "node_modules/@ant-design/fast-color": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@ant-design/fast-color/-/fast-color-3.0.1.tgz", + "integrity": "sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==", + "license": "MIT", + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==", + "license": "MIT" + }, + "node_modules/@antdv-next/cssinjs": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@antdv-next/cssinjs/-/cssinjs-1.0.6.tgz", + "integrity": "sha512-8NL+AzjFZVHfG9A2l+r4rNWdRfbS5FFFozGU9jVl7WNgd7y+wEYSzl+qvRjJuqd3IryacrDfsTxIgcSQkVlr5Q==", + "dependencies": { + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "@v-c/util": "^1.0.19", + "csstype": "^3.2.3", + "stylis": "^4.3.6" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, + "node_modules/@antdv-next/icons": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@antdv-next/icons/-/icons-1.0.6.tgz", + "integrity": "sha512-SCPe/otLTmOEVoAdrZ/fn5pr1wlA1Tbzhk908gWPDnjSLEPIcv4n0Feh416RKj1oe8PKbPIC95BH+HaBXybojg==", + "dependencies": { + "@ant-design/colors": "7.2.1", + "@ant-design/icons-svg": "^4.4.2", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, + "node_modules/@antdv-next/icons/node_modules/@ant-design/colors": { + "version": "7.2.1", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.2.1.tgz", + "integrity": "sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^2.0.6" + } + }, + "node_modules/@antdv-next/icons/node_modules/@ant-design/fast-color": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/@ant-design/fast-color/-/fast-color-2.0.6.tgz", + "integrity": "sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@codemirror/autocomplete": { + "version": "6.20.1", + "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.20.1.tgz", + "integrity": "sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.10.3", + "resolved": "https://registry.npmmirror.com/@codemirror/commands/-/commands-6.10.3.tgz", + "integrity": "sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.6.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/lang-angular": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-angular/-/lang-angular-0.1.4.tgz", + "integrity": "sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-javascript": "^6.1.2", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.3" + } + }, + "node_modules/@codemirror/lang-cpp": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-cpp/-/lang-cpp-6.0.3.tgz", + "integrity": "sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/cpp": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-css": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-css/-/lang-css-6.3.1.tgz", + "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.1.7" + } + }, + "node_modules/@codemirror/lang-go": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-go/-/lang-go-6.0.1.tgz", + "integrity": "sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/go": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-html": { + "version": "6.4.11", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-html/-/lang-html-6.4.11.tgz", + "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.12" + } + }, + "node_modules/@codemirror/lang-java": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-java/-/lang-java-6.0.2.tgz", + "integrity": "sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/java": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-javascript": { + "version": "6.2.5", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-javascript/-/lang-javascript-6.2.5.tgz", + "integrity": "sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-jinja": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-jinja/-/lang-jinja-6.0.0.tgz", + "integrity": "sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.2.0", + "@lezer/lr": "^1.4.0" + } + }, + "node_modules/@codemirror/lang-json": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-json/-/lang-json-6.0.2.tgz", + "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-less": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-less/-/lang-less-6.0.2.tgz", + "integrity": "sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-css": "^6.2.0", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-liquid": { + "version": "6.3.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-liquid/-/lang-liquid-6.3.2.tgz", + "integrity": "sha512-6PDVU3ZnfeYyz1at1E/ttorErZvZFXXt1OPhtfe1EZJ2V2iDFa0CwPqPgG5F7NXN0yONGoBogKmFAafKTqlwIw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.1" + } + }, + "node_modules/@codemirror/lang-markdown": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz", + "integrity": "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.7.1", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.3.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/markdown": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-php": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-php/-/lang-php-6.0.2.tgz", + "integrity": "sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/php": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-python": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-python/-/lang-python-6.2.1.tgz", + "integrity": "sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.3.2", + "@codemirror/language": "^6.8.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/python": "^1.1.4" + } + }, + "node_modules/@codemirror/lang-rust": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-rust/-/lang-rust-6.0.2.tgz", + "integrity": "sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/rust": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-sass": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-sass/-/lang-sass-6.0.2.tgz", + "integrity": "sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-css": "^6.2.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/sass": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-sql": { + "version": "6.10.0", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-sql/-/lang-sql-6.10.0.tgz", + "integrity": "sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-vue": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-vue/-/lang-vue-0.1.3.tgz", + "integrity": "sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-javascript": "^6.1.2", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.1" + } + }, + "node_modules/@codemirror/lang-wast": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-wast/-/lang-wast-6.0.2.tgz", + "integrity": "sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-xml": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz", + "integrity": "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/xml": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-yaml": { + "version": "6.1.3", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-yaml/-/lang-yaml-6.1.3.tgz", + "integrity": "sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.2.0", + "@lezer/lr": "^1.0.0", + "@lezer/yaml": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.12.3", + "resolved": "https://registry.npmmirror.com/@codemirror/language/-/language-6.12.3.tgz", + "integrity": "sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.5.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/language-data": { + "version": "6.5.2", + "resolved": "https://registry.npmmirror.com/@codemirror/language-data/-/language-data-6.5.2.tgz", + "integrity": "sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-angular": "^0.1.0", + "@codemirror/lang-cpp": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-go": "^6.0.0", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-java": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/lang-jinja": "^6.0.0", + "@codemirror/lang-json": "^6.0.0", + "@codemirror/lang-less": "^6.0.0", + "@codemirror/lang-liquid": "^6.0.0", + "@codemirror/lang-markdown": "^6.0.0", + "@codemirror/lang-php": "^6.0.0", + "@codemirror/lang-python": "^6.0.0", + "@codemirror/lang-rust": "^6.0.0", + "@codemirror/lang-sass": "^6.0.0", + "@codemirror/lang-sql": "^6.0.0", + "@codemirror/lang-vue": "^0.1.1", + "@codemirror/lang-wast": "^6.0.0", + "@codemirror/lang-xml": "^6.0.0", + "@codemirror/lang-yaml": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/legacy-modes": "^6.4.0" + } + }, + "node_modules/@codemirror/legacy-modes": { + "version": "6.5.2", + "resolved": "https://registry.npmmirror.com/@codemirror/legacy-modes/-/legacy-modes-6.5.2.tgz", + "integrity": "sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.9.5", + "resolved": "https://registry.npmmirror.com/@codemirror/lint/-/lint-6.9.5.tgz", + "integrity": "sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.35.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.6.0", + "resolved": "https://registry.npmmirror.com/@codemirror/search/-/search-6.6.0.tgz", + "integrity": "sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.37.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.6.0", + "resolved": "https://registry.npmmirror.com/@codemirror/state/-/state-6.6.0.tgz", + "integrity": "sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==", + "license": "MIT", + "dependencies": { + "@marijn/find-cluster-break": "^1.0.0" + } + }, + "node_modules/@codemirror/theme-one-dark": { + "version": "6.1.3", + "resolved": "https://registry.npmmirror.com/@codemirror/theme-one-dark/-/theme-one-dark-6.1.3.tgz", + "integrity": "sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@codemirror/view": { + "version": "6.41.0", + "resolved": "https://registry.npmmirror.com/@codemirror/view/-/view-6.41.0.tgz", + "integrity": "sha512-6H/qadXsVuDY219Yljhohglve8xf4B8xJkVOEWfA5uiYKiTFppjqsvsfR5iPA0RbvRBoOyTZpbLIxe9+0UR8xA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.6.0", + "crelt": "^1.0.6", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "license": "MIT" + }, + "node_modules/@faker-js/faker": { + "version": "10.4.0", + "resolved": "https://registry.npmmirror.com/@faker-js/faker/-/faker-10.4.0.tgz", + "integrity": "sha512-sDBWI3yLy8EcDzgobvJTWq1MJYzAkQdpjXuPukga9wXonhpMRvd1Izuo2Qgwey2OiEoRIBr35RMU9HJRoOHzpw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0", + "npm": ">=10" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@hapi/bourne": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/@hapi/bourne/-/bourne-3.0.0.tgz", + "integrity": "sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@iconify-json/ion": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/@iconify-json/ion/-/ion-1.2.7.tgz", + "integrity": "sha512-ZJNG5kLCbTPr68mdP0jx6Q3lB9AMEQKO2+VvIjuJ2llGFICBLD+cvESn/qGDRIqSfk2D3PrFMf/Qg8WKIUV7cg==", + "license": "MIT", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify-json/mdi": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@iconify-json/mdi/-/mdi-1.2.3.tgz", + "integrity": "sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==", + "license": "Apache-2.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify-json/ri": { + "version": "1.2.10", + "resolved": "https://registry.npmmirror.com/@iconify-json/ri/-/ri-1.2.10.tgz", + "integrity": "sha512-WWMhoncVVM+Xmu9T5fgu2lhYRrKTEWhKk3Com0KiM111EeEsRLiASjpsFKnC/SrB6covhUp95r2mH8tGxhgd5Q==", + "license": "Apache-2.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/vue": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/@iconify/vue/-/vue-5.0.0.tgz", + "integrity": "sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg==", + "license": "MIT", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "vue": ">=3" + } + }, + "node_modules/@intlify/core-base": { + "version": "11.3.0", + "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.3.0.tgz", + "integrity": "sha512-NNX5jIwF4TJBe7RtSKDMOA6JD9mp2mRcBHAwt2X+Q8PvnZub0yj5YYXlFu2AcESdgQpEv/5Yx2uOCV/yh7YkZg==", + "license": "MIT", + "dependencies": { + "@intlify/devtools-types": "11.3.0", + "@intlify/message-compiler": "11.3.0", + "@intlify/shared": "11.3.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/devtools-types": { + "version": "11.3.0", + "resolved": "https://registry.npmmirror.com/@intlify/devtools-types/-/devtools-types-11.3.0.tgz", + "integrity": "sha512-G9CNL4WpANWVdUjubOIIS7/D2j/0j+1KJmhBJxHilWNKr9mmt3IjFV3Hq4JoBP23uOoC5ynxz/FHZ42M+YxfGw==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.3.0", + "@intlify/shared": "11.3.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.3.0", + "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-11.3.0.tgz", + "integrity": "sha512-RAJp3TMsqohg/Wa7bVF3cChRhecSYBLrTCQSj7j0UtWVFLP+6iEJoE2zb7GU5fp+fmG5kCbUdzhmlAUCWXiUJw==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "11.3.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.3.0", + "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-11.3.0.tgz", + "integrity": "sha512-LC6P/uay7rXL5zZ5+5iRJfLs/iUN8apu9tm8YqQVmW3Uq3X4A0dOFUIDuAmB7gAC29wTHOS3EiN/IosNSz0eNQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lezer/common": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/@lezer/common/-/common-1.5.1.tgz", + "integrity": "sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==", + "license": "MIT" + }, + "node_modules/@lezer/cpp": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@lezer/cpp/-/cpp-1.1.5.tgz", + "integrity": "sha512-DIhSXmYtJKLehrjzDFN+2cPt547ySQ41nA8yqcDf/GxMc+YM736xqltFkvADL2M0VebU5I+3+4ks2Vv+Kyq3Aw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/css": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/@lezer/css/-/css-1.3.3.tgz", + "integrity": "sha512-RzBo8r+/6QJeow7aPHIpGVIH59xTcJXp399820gZoMo9noQDRVpJLheIBUicYwKcsbOYoBRoLZlf2720dG/4Tg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/go": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@lezer/go/-/go-1.0.1.tgz", + "integrity": "sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/highlight": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@lezer/highlight/-/highlight-1.2.3.tgz", + "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.3.0" + } + }, + "node_modules/@lezer/html": { + "version": "1.3.13", + "resolved": "https://registry.npmmirror.com/@lezer/html/-/html-1.3.13.tgz", + "integrity": "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/java": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@lezer/java/-/java-1.1.3.tgz", + "integrity": "sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/javascript": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/@lezer/javascript/-/javascript-1.5.4.tgz", + "integrity": "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/json": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@lezer/json/-/json-1.0.3.tgz", + "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/@lezer/lr/-/lr-1.4.8.tgz", + "integrity": "sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/markdown": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/@lezer/markdown/-/markdown-1.6.3.tgz", + "integrity": "sha512-jpGm5Ps+XErS+xA4urw7ogEGkeZOahVQF21Z6oECF0sj+2liwZopd2+I8uH5I/vZsRuuze3OxBREIANLf6KKUw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.5.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@lezer/php": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@lezer/php/-/php-1.0.5.tgz", + "integrity": "sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.1.0" + } + }, + "node_modules/@lezer/python": { + "version": "1.1.18", + "resolved": "https://registry.npmmirror.com/@lezer/python/-/python-1.1.18.tgz", + "integrity": "sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/rust": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@lezer/rust/-/rust-1.0.2.tgz", + "integrity": "sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/sass": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@lezer/sass/-/sass-1.1.0.tgz", + "integrity": "sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/xml": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@lezer/xml/-/xml-1.0.6.tgz", + "integrity": "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/yaml": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/@lezer/yaml/-/yaml-1.0.4.tgz", + "integrity": "sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.4.0" + } + }, + "node_modules/@marijn/find-cluster-break": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", + "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", + "license": "MIT" + }, + "node_modules/@milkdown/components": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/components/-/components-7.20.0.tgz", + "integrity": "sha512-Qn91/oZugGjf17ARE51nbEsH4YklZQaomRSsfxOAtIcwGEJe5osq+zhhKGtgAYFfUb6rU3W86Pe4XDlXN6vFjg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.5.1", + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/exception": "7.20.0", + "@milkdown/plugin-tooltip": "7.20.0", + "@milkdown/preset-commonmark": "7.20.0", + "@milkdown/preset-gfm": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/transformer": "7.20.0", + "@milkdown/utils": "7.20.0", + "@types/lodash-es": "^4.17.12", + "clsx": "^2.0.0", + "dompurify": "^3.2.5", + "lodash-es": "^4.17.21", + "nanoid": "^5.0.9", + "unist-util-visit": "^5.0.0", + "vue": "^3.5.20" + }, + "peerDependencies": { + "@codemirror/language": "^6", + "@codemirror/state": "^6", + "@codemirror/view": "^6" + } + }, + "node_modules/@milkdown/core": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/core/-/core-7.20.0.tgz", + "integrity": "sha512-X9LaUcIR4Y2oiY2J5tslavlPVOwIB3X8/9z1bOeBjlIPtr+urbkY7YEX86EeLV9LyRQ3+t+jXaLMCIjW1wsV6w==", + "license": "MIT", + "dependencies": { + "@milkdown/ctx": "7.20.0", + "@milkdown/exception": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/transformer": "7.20.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.3" + } + }, + "node_modules/@milkdown/crepe": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/crepe/-/crepe-7.20.0.tgz", + "integrity": "sha512-KT+oFF6Q7mI41z01c9v/wUUCyQ2f908TgOsa6mwi25yuxnxQxISZFCjRvlh0sc9p9D3CrMeuJWGCN6DialQdig==", + "license": "MIT", + "dependencies": { + "@codemirror/commands": "^6.2.4", + "@codemirror/language": "^6.10.1", + "@codemirror/language-data": "^6.3.1", + "@codemirror/state": "^6.4.1", + "@codemirror/theme-one-dark": "^6.1.2", + "@codemirror/view": "^6.16.0", + "@milkdown/kit": "7.20.0", + "@types/lodash-es": "^4.17.12", + "clsx": "^2.0.0", + "codemirror": "^6.0.1", + "katex": "^0.16.0", + "lodash-es": "^4.17.21", + "prosemirror-virtual-cursor": "^0.4.2", + "remark-math": "^6.0.0", + "unist-util-visit": "^5.0.0", + "vue": "^3.5.20" + } + }, + "node_modules/@milkdown/ctx": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/ctx/-/ctx-7.20.0.tgz", + "integrity": "sha512-LUK4xdsUngY2xCCvPTyHPifjAknJ5rE6VBjgsP+LySIUKeFUrhqzo/zz2vaOODKzm3DBMIhpZAoW3MAqxoMGIQ==", + "license": "MIT", + "dependencies": { + "@milkdown/exception": "7.20.0" + } + }, + "node_modules/@milkdown/exception": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/exception/-/exception-7.20.0.tgz", + "integrity": "sha512-u8EL7rbqgrWrPpkDhrxUYXauw2DO52JUQmuokrUZvqezmflo7pgIDCr+Rk6AQslzB4Xw+n9eYik5rXX3RXC7Qg==", + "license": "MIT" + }, + "node_modules/@milkdown/kit": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/kit/-/kit-7.20.0.tgz", + "integrity": "sha512-X74KMa0tcDAAMOE9aFtBRN+RCdD/HMXor5YN18e7d0pe4a65MGFklUGlcg1U6zEfeMMYeC3msNvMKLMwk3O5RA==", + "license": "MIT", + "dependencies": { + "@milkdown/components": "7.20.0", + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/plugin-block": "7.20.0", + "@milkdown/plugin-clipboard": "7.20.0", + "@milkdown/plugin-cursor": "7.20.0", + "@milkdown/plugin-history": "7.20.0", + "@milkdown/plugin-indent": "7.20.0", + "@milkdown/plugin-listener": "7.20.0", + "@milkdown/plugin-slash": "7.20.0", + "@milkdown/plugin-tooltip": "7.20.0", + "@milkdown/plugin-trailing": "7.20.0", + "@milkdown/plugin-upload": "7.20.0", + "@milkdown/preset-commonmark": "7.20.0", + "@milkdown/preset-gfm": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/transformer": "7.20.0", + "@milkdown/utils": "7.20.0" + } + }, + "node_modules/@milkdown/plugin-block": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-block/-/plugin-block-7.20.0.tgz", + "integrity": "sha512-jIXfzJ8Zje+6+9ZwQuVmNeYE8KfzqL9YJ/YdMvWQIEiKhy2x9pZMAkkufgmUlq1aouxOV+gk5fX+ovxzEzfSrA==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.5.1", + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0", + "@types/lodash-es": "^4.17.12", + "lodash-es": "^4.17.21" + } + }, + "node_modules/@milkdown/plugin-clipboard": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-clipboard/-/plugin-clipboard-7.20.0.tgz", + "integrity": "sha512-PyokNvwgWcO6/I/0LxDRnATpnxvs5upFRlp6eO8PhjwBFZftCIU6D15Wg4JAxwW7Y0NyTWfViWjc9TwiBd6KOQ==", + "license": "MIT", + "dependencies": { + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0" + } + }, + "node_modules/@milkdown/plugin-cursor": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-cursor/-/plugin-cursor-7.20.0.tgz", + "integrity": "sha512-goCPwUARBzGV6Hvnr3P57Bj5TnyFjYIfDFLvgWTIlsm/dR2Wr4Syy4HDOtaKO9YL/VtZ8gtiZVgeo0vhc4CzMA==", + "license": "MIT", + "dependencies": { + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0", + "prosemirror-drop-indicator": "^0.1.0" + } + }, + "node_modules/@milkdown/plugin-history": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-history/-/plugin-history-7.20.0.tgz", + "integrity": "sha512-lqOYQBrxKj4px/i0Cav3zRkCArwnkv8o7fGMh3NtnUXMLSE7/xojK5GFPS4EaS/UKK7/+i1oV2+HRA6+6Ezy7w==", + "license": "MIT", + "dependencies": { + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0" + } + }, + "node_modules/@milkdown/plugin-indent": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-indent/-/plugin-indent-7.20.0.tgz", + "integrity": "sha512-KfdIztQMuHv4Rx1JmSQe2vooN4+Zm7MhjQkNolGyiI7BPZbu855hVIC/s96x3Dk04tkbb+M/i9MJhxCazxfd6Q==", + "license": "MIT", + "dependencies": { + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0" + } + }, + "node_modules/@milkdown/plugin-listener": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-listener/-/plugin-listener-7.20.0.tgz", + "integrity": "sha512-Sj+B63JfM3NVVS3uGXTPkoz8xx8MQYrR28pI9AaqX5q60tvCvOJw9E1ODvSsBEjeqnN4kablDthIugLlBhOlwQ==", + "license": "MIT", + "dependencies": { + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@types/lodash-es": "^4.17.12", + "lodash-es": "^4.17.21" + } + }, + "node_modules/@milkdown/plugin-prism": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-prism/-/plugin-prism-7.20.0.tgz", + "integrity": "sha512-Iy8rh/KOzTmJIWpPhjzeF2NEkhldLZ0Edu0/zU3UBsom939ZcUdcsLujwpad7P6KlueBHw8QgSNe0gOEQ56yTQ==", + "license": "MIT", + "dependencies": { + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0", + "@types/hast": "^3.0.4", + "refractor": "^5.0.0" + } + }, + "node_modules/@milkdown/plugin-slash": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-slash/-/plugin-slash-7.20.0.tgz", + "integrity": "sha512-Qm3/ZxkGYd5XN+J/X91lGGu7SBzuQBOTOLjuJdg4qDBZmdEHlGojB+5BhCSAMB3WGyCpQQGbSqKOelUrXtj68w==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.5.1", + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0", + "@types/lodash-es": "^4.17.12", + "lodash-es": "^4.17.21" + } + }, + "node_modules/@milkdown/plugin-tooltip": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-tooltip/-/plugin-tooltip-7.20.0.tgz", + "integrity": "sha512-BVaXorpmA6ZAS3+xv0rgrtjV1h2K39G5Z9Wun4RxT1YXJTTbzIuFQ3hwBAGLjLMwTsosp7YhRLaMJJAC0jEY5Q==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.5.1", + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0", + "@types/lodash-es": "^4.17.12", + "lodash-es": "^4.17.21" + } + }, + "node_modules/@milkdown/plugin-trailing": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-trailing/-/plugin-trailing-7.20.0.tgz", + "integrity": "sha512-AxDeMSAZfj0Er7RYLvLRf6FKdQtLVmotxML6Se6zgqIa++bFeIXCU22/FC+9r/6d1eUtraTva9ez5K2qPy8qig==", + "license": "MIT", + "dependencies": { + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0" + } + }, + "node_modules/@milkdown/plugin-upload": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/plugin-upload/-/plugin-upload-7.20.0.tgz", + "integrity": "sha512-g3UQrD2zfpm86r3BcBDfOdEAyQHhay1nf5wUQgNf4zn6IgRttfEF8tosQsL1B/WBnZB05hH5scLWo4DR2bFhUw==", + "license": "MIT", + "dependencies": { + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/exception": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/utils": "7.20.0" + } + }, + "node_modules/@milkdown/preset-commonmark": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/preset-commonmark/-/preset-commonmark-7.20.0.tgz", + "integrity": "sha512-+mPcONXfdjaXdx8JMxDIOT3PWHfy5vewK8iY8j8bUiYD8Iw7YfyWTUh9JHOf4vmOpiKGCJd7+iz7e93u95bQRw==", + "license": "MIT", + "dependencies": { + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/exception": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/transformer": "7.20.0", + "@milkdown/utils": "7.20.0", + "remark-inline-links": "^7.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1" + } + }, + "node_modules/@milkdown/preset-gfm": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/preset-gfm/-/preset-gfm-7.20.0.tgz", + "integrity": "sha512-ulErTWDqrGYYqto4kQO9dPTMRp+q44pdRTPW4MTeiSO7eJ6JIBUKSqtCm1zf7MX6nZPaPhuscmg5CU2moXOwxQ==", + "license": "MIT", + "dependencies": { + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/exception": "7.20.0", + "@milkdown/preset-commonmark": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/transformer": "7.20.0", + "@milkdown/utils": "7.20.0", + "prosemirror-safari-ime-span": "^1.0.1", + "remark-gfm": "^4.0.1" + } + }, + "node_modules/@milkdown/prose": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/prose/-/prose-7.20.0.tgz", + "integrity": "sha512-Qe6jmKcXsjOfpk8duDFdkLCEo5044L8HSyKVn7ewAe7XJJPUM6bPQaP130UAznq75/+TiKxFCzurcrBO3LzNRg==", + "license": "MIT", + "dependencies": { + "@milkdown/exception": "7.20.0", + "prosemirror-changeset": "^2.3.1", + "prosemirror-commands": "^1.7.1", + "prosemirror-dropcursor": "^1.8.2", + "prosemirror-gapcursor": "^1.4.0", + "prosemirror-history": "^1.5.0", + "prosemirror-inputrules": "^1.5.1", + "prosemirror-keymap": "^1.2.3", + "prosemirror-model": "^1.25.4", + "prosemirror-schema-list": "^1.5.1", + "prosemirror-state": "^1.4.4", + "prosemirror-tables": "^1.8.1", + "prosemirror-transform": "^1.10.5", + "prosemirror-view": "^1.41.3" + } + }, + "node_modules/@milkdown/theme-nord": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/theme-nord/-/theme-nord-7.20.0.tgz", + "integrity": "sha512-yfT+BQvURTmi+Cjt9rRqFjORrQISbJItKzQD+486hc8hfBcbHnbEjhNAkvoi6IAOWsK+Cj67BuCFtKbYeovrKA==", + "license": "MIT", + "dependencies": { + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/prose": "7.20.0", + "clsx": "^2.0.0" + } + }, + "node_modules/@milkdown/transformer": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/transformer/-/transformer-7.20.0.tgz", + "integrity": "sha512-h7KGFr1o5AYwc+hEfnA3Dldo4jRrYOB/7KExaqelcjUz++KYI/9LXMOsV7CpgjtLI3Xtf2IIRTZND1+p2nsOaw==", + "license": "MIT", + "dependencies": { + "@milkdown/exception": "7.20.0", + "@milkdown/prose": "7.20.0", + "remark": "^15.0.1", + "unified": "^11.0.3" + } + }, + "node_modules/@milkdown/utils": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/utils/-/utils-7.20.0.tgz", + "integrity": "sha512-ciEhtLKhIW/Kaz/NRE5DUXVoMCdenn7S4mClrO7sZ/nXtmObnk3okJzSDnamQoDOcLOIbpOu1V3E1Btkvc5x9w==", + "license": "MIT", + "dependencies": { + "@milkdown/core": "7.20.0", + "@milkdown/ctx": "7.20.0", + "@milkdown/exception": "7.20.0", + "@milkdown/prose": "7.20.0", + "@milkdown/transformer": "7.20.0", + "nanoid": "^5.0.9" + } + }, + "node_modules/@milkdown/vue": { + "version": "7.20.0", + "resolved": "https://registry.npmmirror.com/@milkdown/vue/-/vue-7.20.0.tgz", + "integrity": "sha512-hQ7D/WIY5+ZXWgonaebXVSAK2QDOTVLIb9sLUfOXwzIzjTh+zDNy3v9+OWETKWvIS+myP/u5GIYdHCbLlHpELA==", + "license": "MIT", + "dependencies": { + "@milkdown/crepe": "7.20.0", + "@milkdown/kit": "7.20.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz", + "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ocavue/utils": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/@ocavue/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-8W3q1hxx9qFdrYgPtbElllG/tqYkO/dMhlRUiqasO0SuDFTj78azSQjhIrBTFWxlBPPsSZN6zXYHmb3RwN2Jtg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.122.0", + "resolved": "https://registry.npmmirror.com/@oxc-project/types/-/types-0.122.0.tgz", + "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@oxfmt/binding-android-arm-eabi": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.43.0.tgz", + "integrity": "sha512-CgU2s+/9hHZgo0IxVxrbMPrMj+tJ6VM3mD7Mr/4oiz4FNTISLoCvRmB5nk4wAAle045RtRjd86m673jwPyb1OQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-android-arm64": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.43.0.tgz", + "integrity": "sha512-T9OfRwjA/EdYxAqbvR7TtqLv5nIrwPXuCtTwOHtS7aR9uXyn74ZYgzgTo6/ZwvTq9DY4W+DsV09hB2EXgn9EbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-darwin-arm64": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.43.0.tgz", + "integrity": "sha512-o3i49ZUSJWANzXMAAVY1wnqb65hn4JVzwlRQ5qfcwhRzIA8lGVaud31Q3by5ALHPrksp5QEaKCQF9aAS3TXpZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-darwin-x64": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.43.0.tgz", + "integrity": "sha512-vWECzzCFkb0kK6jaHjbtC5sC3adiNWtqawFCxhpvsWlzVeKmv5bNvkB4nux+o4JKWTpHCM57NDK/MeXt44txmA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-freebsd-x64": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.43.0.tgz", + "integrity": "sha512-rgz8JpkKiI/umOf7fl9gwKyQasC8bs5SYHy6g7e4SunfLBY3+8ATcD5caIg8KLGEtKFm5ujKaH8EfjcmnhzTLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-arm-gnueabihf": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.43.0.tgz", + "integrity": "sha512-nWYnF3vIFzT4OM1qL/HSf1Yuj96aBuKWSaObXHSWliwAk2rcj7AWd6Lf7jowEBQMo4wCZVnueIGw/7C4u0KTBQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-arm-musleabihf": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.43.0.tgz", + "integrity": "sha512-sFg+NWJbLfupYTF4WELHAPSnLPOn1jiDZ33Z1jfDnTaA+cC3iB35x0FMMZTFdFOz3icRIArncwCcemJFGXu6TQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-arm64-gnu": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.43.0.tgz", + "integrity": "sha512-MelWqv68tX6wZEILDrTc9yewiGXe7im62+5x0bNXlCYFOZdA+VnYiJfAihbROsZ5fm90p9C3haFrqjj43XnlAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-arm64-musl": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.43.0.tgz", + "integrity": "sha512-ROaWfYh+6BSJ1Arwy5ujijTlwnZetxDxzBpDc1oBR4d7rfrPBqzeyjd5WOudowzQUgyavl2wEpzn1hw3jWcqLA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-ppc64-gnu": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.43.0.tgz", + "integrity": "sha512-PJRs/uNxmFipJJ8+SyKHh7Y7VZIKQicqrrBzvfyM5CtKi8D7yZKTwUOZV3ffxmiC2e7l1SDJpkBEOyue5NAFsg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-riscv64-gnu": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.43.0.tgz", + "integrity": "sha512-j6biGAgzIhj+EtHXlbNumvwG7XqOIdiU4KgIWRXAEj/iUbHKukKW8eXa4MIwpQwW1YkxovduKtzEAPnjlnAhVQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-riscv64-musl": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.43.0.tgz", + "integrity": "sha512-RYWxAcslKxvy7yri24Xm9cmD0RiANaiEPs007EFG6l9h1ChM69Q5SOzACaCoz4Z9dEplnhhneeBaTWMEdpgIbA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-s390x-gnu": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.43.0.tgz", + "integrity": "sha512-DT6Q8zfQQy3jxpezAsBACEHNUUixKSYTwdXeXojNHe4DQOoxjPdjr3Szu6BRNjxLykZM/xMNmp9ElOIyDppwtw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-x64-gnu": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.43.0.tgz", + "integrity": "sha512-R8Yk7iYcuZORXmCfFZClqbDxRZgZ9/HEidUuBNdoX8Ptx07cMePnMVJ/woB84lFIDjh2ROHVaOP40Ds3rBXFqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-x64-musl": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.43.0.tgz", + "integrity": "sha512-F2YYqyvnQNvi320RWZNAvsaWEHwmW3k4OwNJ1hZxRKXupY63expbBaNp6jAgvYs7y/g546vuQnGHQuCBhslhLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-openharmony-arm64": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.43.0.tgz", + "integrity": "sha512-OE6TdietLXV3F6c7pNIhx/9YC1/2YFwjU9DPc/fbjxIX19hNIaP1rS0cFjCGJlGX+cVJwIKWe8Mos+LdQ1yAJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-win32-arm64-msvc": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.43.0.tgz", + "integrity": "sha512-0nWK6a7pGkbdoypfVicmV9k/N1FwjPZENoqhlTU+5HhZnAhpIO3za30nEE33u6l6tuy9OVfpdXUqxUgZ+4lbZw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-win32-ia32-msvc": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.43.0.tgz", + "integrity": "sha512-9aokTR4Ft+tRdvgN/pKzSkVy2ksc4/dCpDm9L/xFrbIw0yhLtASLbvoG/5WOTUh/BRPPnfGTsWznEqv0dlOmhA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-win32-x64-msvc": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.43.0.tgz", + "integrity": "sha512-4bPgdQux2ZLWn3bf2TTXXMHcJB4lenmuxrLqygPmvCJ104Yqzj1UctxSRzR31TiJ4MLaG22RK8dUsVpJtrCz5g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.58.0.tgz", + "integrity": "sha512-1T7UN3SsWWxpWyWGn1cT3ASNJOo+pI3eUkmEl7HgtowapcV8kslYpFQcYn431VuxghXakPNlbjRwhqmR37PFOg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-android-arm64/-/binding-android-arm64-1.58.0.tgz", + "integrity": "sha512-GryzujxuiRv2YFF7bRy8mKcxlbuAN+euVUtGJt9KKbLT8JBUIosamVhcthLh+VEr6KE6cjeVMAQxKAzJcoN7dg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.58.0.tgz", + "integrity": "sha512-7/bRSJIwl4GxeZL9rPZ11anNTyUO9epZrfEJH/ZMla3+/gbQ6xZixh9nOhsZ0QwsTW7/5J2A/fHbD1udC5DQQA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.58.0.tgz", + "integrity": "sha512-EqdtJSiHweS2vfILNrpyJ6HUwpEq2g7+4Zx1FPi4hu3Hu7tC3znF6ufbXO8Ub2LD4mGgznjI7kSdku9NDD1Mkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.58.0.tgz", + "integrity": "sha512-VQt5TH4M42mY20F545G637RKxV/yjwVtKk2vfXuazfReSIiuvWBnv+FVSvIV5fKVTJNjt3GSJibh6JecbhGdBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.58.0.tgz", + "integrity": "sha512-fBYcj4ucwpAtjJT3oeBdFBYKvNyjRSK+cyuvBOTQjh0jvKp4yeA4S/D0IsCHus/VPaNG5L48qQkh+Vjy3HL2/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.58.0.tgz", + "integrity": "sha512-0BeuFfwlUHlJ1xpEdSD1YO3vByEFGPg36uLjK1JgFaxFb4W6w17F8ET8sz5cheZ4+x5f2xzdnRrrWv83E3Yd8g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.58.0.tgz", + "integrity": "sha512-TXlZgnPTlxrQzxG9ZXU7BNwx1Ilrr17P3GwZY0If2EzrinqRH3zXPc3HrRcBJgcsoZNMuNL5YivtkJYgp467UQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.58.0.tgz", + "integrity": "sha512-zSoYRo5dxHLcUx93Stl2hW3hSNjPt99O70eRVWt5A1zwJ+FPjeCCANCD2a9R4JbHsdcl11TIQOjyigcRVOH2mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.58.0.tgz", + "integrity": "sha512-NQ0U/lqxH2/VxBYeAIvMNUK1y0a1bJ3ZicqkF2c6wfakbEciP9jvIE4yNzCFpZaqeIeRYaV7AVGqEO1yrfVPjA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.58.0.tgz", + "integrity": "sha512-X9J+kr3gIC9FT8GuZt0ekzpNUtkBVzMVU4KiKDSlocyQuEgi3gBbXYN8UkQiV77FTusLDPsovjo95YedHr+3yg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.58.0.tgz", + "integrity": "sha512-CDze3pi1OO3Wvb/QsXjmLEY4XPKGM6kIo82ssNOgmcl1IdndF9VSGAE38YLhADWmOac7fjqhBw82LozuUVxD0Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.58.0.tgz", + "integrity": "sha512-b/89glbxFaEAcA6Uf1FvCNecBJEgcUTsV1quzrqXM/o4R1M4u+2KCVuyGCayN2UpsRWtGGLb+Ver0tBBpxaPog==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.58.0.tgz", + "integrity": "sha512-0/yYpkq9VJFCEcuRlrViGj8pJUFFvNS4EkEREaN7CB1EcLXJIaVSSa5eCihwBGXtOZxhnblWgxks9juRdNQI7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.58.0.tgz", + "integrity": "sha512-hr6FNvmcAXiH+JxSvaJ4SJ1HofkdqEElXICW9sm3/Rd5eC3t7kzvmLyRAB3NngKO2wzXRCAm4Z/mGWfrsS4X8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.58.0.tgz", + "integrity": "sha512-R+O368VXgRql1K6Xar+FEo7NEwfo13EibPMoTv3sesYQedRXd6m30Dh/7lZMxnrQVFfeo4EOfYIP4FpcgWQNHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.58.0.tgz", + "integrity": "sha512-Q0FZiAY/3c4YRj4z3h9K1PgaByrifrfbBoODSeX7gy97UtB7pySPUQfC2B/GbxWU6k7CzQrRy5gME10PltLAFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.58.0.tgz", + "integrity": "sha512-Y8FKBABrSPp9H0QkRLHDHOSUgM/309a3IvOVgPcVxYcX70wxJrk608CuTg7w+C6vEd724X5wJoNkBcGYfH7nNQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.58.0.tgz", + "integrity": "sha512-bCn5rbiz5My+Bj7M09sDcnqW0QJyINRVxdZ65x1/Y2tGrMwherwK/lpk+HRQCKvXa8pcaQdF5KY5j54VGZLwNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", + "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pengzhanbo/utils": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/@pengzhanbo/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-rVmmTdeQs+gdk5XboXG7gv4LSLnCceZ9l9Z1v/P+zScOpwPYn6mSVukPtRC22234rXC/13AZV2gZ3ZDvNmP9XA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@remirror/core-constants": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/@remirror/core-constants/-/core-constants-3.0.0.tgz", + "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==", + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", + "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", + "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/node/-/node-4.2.2.tgz", + "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide/-/oxide-4.2.2.tgz", + "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-x64": "4.2.2", + "@tailwindcss/oxide-freebsd-x64": "4.2.2", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-x64-musl": "4.2.2", + "@tailwindcss/oxide-wasm32-wasi": "4.2.2", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", + "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", + "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", + "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", + "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", + "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", + "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", + "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", + "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", + "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", + "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", + "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", + "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.2", + "@tailwindcss/oxide": "4.2.2", + "tailwindcss": "4.2.2" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tiptap/core": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/core/-/core-3.22.1.tgz", + "integrity": "sha512-6wPNhkdLIGYiKAGqepDCRtR0TYGJxV40SwOEN2vlPhsXqAgzmyG37UyREj5pGH5xTekugqMCgCnyRg7m5nYoYQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-blockquote/-/extension-blockquote-3.22.1.tgz", + "integrity": "sha512-omPsJ/IMAZYhXqOaEenYE+HA9U2zju5rQbAn6Xktynvr4A5P95jqkgAwncXB82pCkNYU/uYxi51vyTweTeEUHA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-bold/-/extension-bold-3.22.1.tgz", + "integrity": "sha512-0+q6Apu1Vx2+ReB2ktTpBrQ5/dCvGzTkJCy+MZ/t8WBcybqFXOKYRCr/i/VGPDpXZttxpk0EPl0+ao+NVcUTAA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.22.1.tgz", + "integrity": "sha512-JJI63N55hLPjfqHgBnbG1ORZTXJiswnfBkfNd8YKytCC8D++g5qX3UMObxmJKLMBRGyqjEi6krzOyYtOix5ALA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1", + "@tiptap/pm": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-bullet-list/-/extension-bullet-list-3.22.1.tgz", + "integrity": "sha512-83L+4N2JziWORbWtlsM0xBm3LOKIw4YtIm+Kh4amV5kGvIgIL5I1KYzoxv20qjgFX2k08LtLMwPdvPSPSh4e7g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-code/-/extension-code-3.22.1.tgz", + "integrity": "sha512-Ze+hjSLLCn+5gVpuE/Uv7mQ83AlG5A9OPsuDoyzTpJ2XNvZP2iZdwQMGqwXKC8eH7fIOJN6XQ3IDv/EhltQx/Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-code-block/-/extension-code-block-3.22.1.tgz", + "integrity": "sha512-fr3b1seFsAeYHtPAb9fbATkGcgyfStD05GHsZXFLh7yCpf2ejWLNxdWJT/g+FggSEHYFKCXT06aixk0WbtRcWw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1", + "@tiptap/pm": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-document/-/extension-document-3.22.1.tgz", + "integrity": "sha512-fBI/+PGtK6pzitqjSSSYL2+uZglX6T53zb5nLEmN/q8q7FzUuUpglp8toHVhBG05WDk4vx6Z7bC95uyxkYdoAA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-dropcursor/-/extension-dropcursor-3.22.1.tgz", + "integrity": "sha512-PuSNoTROZB564KpTG9ExVB3CsfRa0ridHx+1sWZajOBVZJiXSn4QlS/ShS509SOx8z17DyxEw06IH//OHY9XyQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-floating-menu/-/extension-floating-menu-3.22.1.tgz", + "integrity": "sha512-TaZqmaoKv36FzbKTrBkkv74o0t8dYTftNZ7NotBqfSki0BB2PupTCJHafdu1YI0zmJ3xEzjB/XKcKPz2+10sDA==", + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@floating-ui/dom": "^1.0.0", + "@tiptap/core": "^3.22.1", + "@tiptap/pm": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-gapcursor/-/extension-gapcursor-3.22.1.tgz", + "integrity": "sha512-qqsyy7unWM3elv+7ru+6paKAnw1PZTvjNVQu3UzB6d556Gx2uE4isXJNdBaslBZdp2EoaYdIkhhEccW9B/Nwqg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-hard-break/-/extension-hard-break-3.22.1.tgz", + "integrity": "sha512-hzLwLEZVbZODa9q5UiCQpOUmDnyxN19FA4LhlqLP0/JSHewP/aol5igFZwuw0XVFp425BuzPjrB7tmr0GRTDWw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-heading/-/extension-heading-3.22.1.tgz", + "integrity": "sha512-EaIihzrOfXUHQlL6fFyJCkDrjgg0e/eD4jpkjhKpeuJDcqf7eJ1c0E2zcNRAiZkeXdN/hTQFaXKsSyNUE7T7Sg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.22.1.tgz", + "integrity": "sha512-Q18A8IN+gnfptIksPeVAI6oOBGYKAGf+QN0FEJ5OXO4BEAmA3hflflA1rWNfPC4aQNry/N7sAl8Gpd6HuIbz2w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1", + "@tiptap/pm": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-image": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-image/-/extension-image-3.22.1.tgz", + "integrity": "sha512-FtZCOWyyaEvSfaOPoH78IKb1BlG/Vao4PARdlrVCD1FlV1YGLAgSW5YkQAJ/vPTLwyNNZtqryaBpZrA8Wm25nQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-italic/-/extension-italic-3.22.1.tgz", + "integrity": "sha512-EXPZWEsWJK9tUMypddOBvayaBeu8wFV2uH5PNrtDKrfRZ1Bf8GQ3lfcO0blHssaQ9nWqa9HwBC1mdfWcmfpxig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-link": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-link/-/extension-link-3.22.1.tgz", + "integrity": "sha512-RHch/Bqv+QDvW3J1CXmiTB54pyrQYNQq8Vfa7is/O209dNPA8tdbkRP44rDjqn8NeDCriC/oJ4avWeXL4qNDVw==", + "license": "MIT", + "dependencies": { + "linkifyjs": "^4.3.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1", + "@tiptap/pm": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-list": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-list/-/extension-list-3.22.1.tgz", + "integrity": "sha512-6bVI5A12sFeyb0EngABV8/qCtC2IgiDbWC8mtNNLh5dAVGaUKo1KucL6vRYDhzXhyO/eHuGYepXZDLOOdS9LIQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1", + "@tiptap/pm": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-list-item/-/extension-list-item-3.22.1.tgz", + "integrity": "sha512-v0FgSX3cqLY3L1hIe2PFRTR3/+wlFOdFjv0p3fSJ5Tl7cgU7DR1OcljFqpw0exePcmt6dXqXVQua3PxSVV15eA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-list-keymap": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-list-keymap/-/extension-list-keymap-3.22.1.tgz", + "integrity": "sha512-00Nz4jJygYGJg6N1mdbQUslFG9QaGZq5P9MFwqoduWku7gYHWkZoZvrkxZrYtxGTHVIlLnF8LIfblAlOwNd76g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-ordered-list/-/extension-ordered-list-3.22.1.tgz", + "integrity": "sha512-sbd99ZUa1lIemH7N6dLB+9aYxUgduwW2216VM3dLJBS9hmTA4iDRxWx0a1ApnAVv+sZasRSbb/wpYLtXviA1XQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-paragraph/-/extension-paragraph-3.22.1.tgz", + "integrity": "sha512-mnvGEZfZFysHGvmEqrSLjeddaNPB3UmomTInv9gsImw8hlB4/gQedvB6Qf2tFfIjl4ISKC5AbFxraSnJfjaL5g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-placeholder": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-placeholder/-/extension-placeholder-3.22.1.tgz", + "integrity": "sha512-f8NJNEJTDuT9UIZdVIAPoySgzQ/nKxR/gWRqCnwtR4O26zo/JdKI2XvrTE/iNrV3Khme8rjCtO7/8CQgTeMMxA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-strike/-/extension-strike-3.22.1.tgz", + "integrity": "sha512-LTdnGmglK1f/AW//36k+Km8URA1wrTLENi3R5N+/ipv+yP2rZ2Ki1R1m6yJx3KSFzR55c91xE6659/vz1uZ6iA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-text/-/extension-text-3.22.1.tgz", + "integrity": "sha512-wFCNCATSTTFhvA9wOPkAgzPVyG3RM6+jOlDeRhHUCHsFWFWj0w9ZPwA/nP+Qi5hEW7kGG9V8o62RjBdHNvK2PQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extension-underline": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extension-underline/-/extension-underline-3.22.1.tgz", + "integrity": "sha512-p8/ErqQInWJbpncBycIggmtCjdrMwHmA3GNhOugo6F4fYfeVxgy7pVb7ZF+ss62d0mpQvEd81pyrzhkBtb0nBg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1" + } + }, + "node_modules/@tiptap/extensions": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/extensions/-/extensions-3.22.1.tgz", + "integrity": "sha512-BKpp371Pl1CVcLRLrWH7PC1I+IsXOhet80+pILqCMlwkJnsVtOOVRr5uCF6rbPP4xK5H/ehkQWmxA8rqpv42aA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.22.1", + "@tiptap/pm": "^3.22.1" + } + }, + "node_modules/@tiptap/pm": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/pm/-/pm-3.22.1.tgz", + "integrity": "sha512-OSqSg2974eLJT5PNKFLM7156lBXCUf/dsKTQXWSzsLTf6HOP4dYP6c0YbAk6lgbNI+BdszsHNClmLVLA8H/L9A==", + "license": "MIT", + "dependencies": { + "prosemirror-changeset": "^2.3.0", + "prosemirror-collab": "^1.3.1", + "prosemirror-commands": "^1.6.2", + "prosemirror-dropcursor": "^1.8.1", + "prosemirror-gapcursor": "^1.3.2", + "prosemirror-history": "^1.4.1", + "prosemirror-inputrules": "^1.4.0", + "prosemirror-keymap": "^1.2.2", + "prosemirror-markdown": "^1.13.1", + "prosemirror-menu": "^1.2.4", + "prosemirror-model": "^1.24.1", + "prosemirror-schema-basic": "^1.2.3", + "prosemirror-schema-list": "^1.5.0", + "prosemirror-state": "^1.4.3", + "prosemirror-tables": "^1.6.4", + "prosemirror-trailing-node": "^3.0.0", + "prosemirror-transform": "^1.10.2", + "prosemirror-view": "^1.38.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/starter-kit/-/starter-kit-3.22.1.tgz", + "integrity": "sha512-1fFmURkgofxgP9GW993bSpxf2rIJzQbWZ9rPw17qbAVuGouIArG+Fd/A1WUD95Vdbx6JIrc1QxbNlLs7bhcoPA==", + "license": "MIT", + "dependencies": { + "@tiptap/core": "^3.22.1", + "@tiptap/extension-blockquote": "^3.22.1", + "@tiptap/extension-bold": "^3.22.1", + "@tiptap/extension-bullet-list": "^3.22.1", + "@tiptap/extension-code": "^3.22.1", + "@tiptap/extension-code-block": "^3.22.1", + "@tiptap/extension-document": "^3.22.1", + "@tiptap/extension-dropcursor": "^3.22.1", + "@tiptap/extension-gapcursor": "^3.22.1", + "@tiptap/extension-hard-break": "^3.22.1", + "@tiptap/extension-heading": "^3.22.1", + "@tiptap/extension-horizontal-rule": "^3.22.1", + "@tiptap/extension-italic": "^3.22.1", + "@tiptap/extension-link": "^3.22.1", + "@tiptap/extension-list": "^3.22.1", + "@tiptap/extension-list-item": "^3.22.1", + "@tiptap/extension-list-keymap": "^3.22.1", + "@tiptap/extension-ordered-list": "^3.22.1", + "@tiptap/extension-paragraph": "^3.22.1", + "@tiptap/extension-strike": "^3.22.1", + "@tiptap/extension-text": "^3.22.1", + "@tiptap/extension-underline": "^3.22.1", + "@tiptap/extensions": "^3.22.1", + "@tiptap/pm": "^3.22.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/vue-3": { + "version": "3.22.1", + "resolved": "https://registry.npmmirror.com/@tiptap/vue-3/-/vue-3-3.22.1.tgz", + "integrity": "sha512-7xRzcUuEjIUHA3MQ5kW2uBSJp4hS9CATxkEgPxXktKGL9h14upnhmatRA76lkQhKhiIA4j+G1QmFFQE+p8dEOg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "optionalDependencies": { + "@tiptap/extension-bubble-menu": "^3.22.1", + "@tiptap/extension-floating-menu": "^3.22.1" + }, + "peerDependencies": { + "@floating-ui/dom": "^1.0.0", + "@tiptap/core": "^3.22.1", + "@tiptap/pm": "^3.22.1", + "vue": "^3.0.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tybys/wasm-util/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/katex": { + "version": "0.16.8", + "resolved": "https://registry.npmmirror.com/@types/katex/-/katex-0.16.8.tgz", + "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", + "license": "MIT" + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/prismjs": { + "version": "1.26.6", + "resolved": "https://registry.npmmirror.com/@types/prismjs/-/prismjs-1.26.6.tgz", + "integrity": "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@uiw/codemirror-theme-dracula": { + "version": "4.25.9", + "resolved": "https://registry.npmmirror.com/@uiw/codemirror-theme-dracula/-/codemirror-theme-dracula-4.25.9.tgz", + "integrity": "sha512-0VTnpPCHPc+7LqYsQOX6nvW32XiiT+O6kJjReUbV7Eio3vPHsb+b9P4DKhz4AAvIIYMxmHkMuautHKuWktFXSg==", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-themes": "4.25.9" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/codemirror-theme-github": { + "version": "4.25.9", + "resolved": "https://registry.npmmirror.com/@uiw/codemirror-theme-github/-/codemirror-theme-github-4.25.9.tgz", + "integrity": "sha512-AGpTamNiySKNzq3Jc7QjpwgQRVaHUaBtmOKiUDghYSfEGjsc5uW4NUW70sSU3BnkGv+lCTUnF3175KM24BWZbw==", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-themes": "4.25.9" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/codemirror-theme-material": { + "version": "4.25.9", + "resolved": "https://registry.npmmirror.com/@uiw/codemirror-theme-material/-/codemirror-theme-material-4.25.9.tgz", + "integrity": "sha512-6f2x+gmj2hHagqy6VkpnPbK7SWyP6kKruGgqpyIy09/f9pAUCqkW8mRY5ZEr28tA+YEGQaSY0Z2IBCHl8OKJog==", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-themes": "4.25.9" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/codemirror-theme-monokai": { + "version": "4.25.9", + "resolved": "https://registry.npmmirror.com/@uiw/codemirror-theme-monokai/-/codemirror-theme-monokai-4.25.9.tgz", + "integrity": "sha512-qKWRZOGpBCasZJdYU+SsXd92TjncF3QYHpraCPe29bxN22jeIxi2UC4MCuJHwa8hHljHOCSdx1XG/GuUMn7XiQ==", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-themes": "4.25.9" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/codemirror-theme-nord": { + "version": "4.25.9", + "resolved": "https://registry.npmmirror.com/@uiw/codemirror-theme-nord/-/codemirror-theme-nord-4.25.9.tgz", + "integrity": "sha512-5c568xmMidwICADxACB1zIhKoEgqbdVrdeOUZ2p5pE6NNKGR4ATzk9OSqhvr1ZhZPNOktxqSLLRzihFaZG0bDQ==", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-themes": "4.25.9" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/codemirror-theme-solarized": { + "version": "4.25.9", + "resolved": "https://registry.npmmirror.com/@uiw/codemirror-theme-solarized/-/codemirror-theme-solarized-4.25.9.tgz", + "integrity": "sha512-axUgU9+3JKXW83F+te454qcyTmQAm0+2Fxv0yoegiH6bdl7DjFq/lNVGGZtLwN47AQCj2Qwrheeet2t3GbY9VQ==", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-themes": "4.25.9" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/codemirror-theme-tokyo-night": { + "version": "4.25.9", + "resolved": "https://registry.npmmirror.com/@uiw/codemirror-theme-tokyo-night/-/codemirror-theme-tokyo-night-4.25.9.tgz", + "integrity": "sha512-NkSqguMpzRjsRBbTIfOrGS35tQkE3K8AAetZHlbRZC7fnI52RreZ11X41cOYrc/Dapt8xqUPlhlvclymGFgy8g==", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-themes": "4.25.9" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/@uiw/codemirror-themes": { + "version": "4.25.9", + "resolved": "https://registry.npmmirror.com/@uiw/codemirror-themes/-/codemirror-themes-4.25.9.tgz", + "integrity": "sha512-DAHKb/L9ELwjY4nCf/MP/mIllHOn4GQe7RR4x8AMJuNeh9nGRRoo1uPxrxMmUL/bKqe6kDmDbIZ2AlhlqyIJuw==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@codemirror/language": ">=6.0.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/view": ">=6.0.0" + } + }, + "node_modules/@v-c/async-validator": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@v-c/async-validator/-/async-validator-1.0.1.tgz", + "integrity": "sha512-2WXdbTso13119ZLiwUv1JkmdL0K4ll69id4oE3ft3LQX+YAHOoJtfx080u26lLtypgZS32PguoohgB0BVo39rg==" + }, + "node_modules/@v-c/cascader": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@v-c/cascader/-/cascader-1.0.3.tgz", + "integrity": "sha512-TaXkWxP3N6LW1yezeN+91k7BFYDSsWj1Y1ujWv51I0lJY4l0iwtjKDDmLLMYoqtUjnW1Onz1g1h6PtiDFALcXQ==", + "dependencies": { + "@v-c/select": "^1.0.20", + "@v-c/tree": "^1.0.5", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/checkbox": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@v-c/checkbox/-/checkbox-1.0.1.tgz", + "integrity": "sha512-+QsE/0VfU6oeglwuHWYxRNTn3+eV08iG0uN/upDmqSGznezInzfUClh+t4acd/OxyJVtuob0WKsg/vPlT6WRWw==", + "dependencies": { + "@v-c/util": "^1.0.13" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/collapse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@v-c/collapse/-/collapse-1.0.0.tgz", + "integrity": "sha512-y4NAl3j4mka193ZMDLHdISA8to61qoROG6/kTQ0myM2ZuEsonnEK1QWlqoEw3gveMsa6a4RdyoXLxdGdcJyp0Q==", + "dependencies": { + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/color-picker": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@v-c/color-picker/-/color-picker-1.0.6.tgz", + "integrity": "sha512-XiTlEMG5p5jkCdKP7nbeo9EJrpdXnoW4uBOA2us8pVgA6m0GxrwMoCg//X+1XsuOaebG/1Swo65mjRuMBM6rZg==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^3.0.0", + "@v-c/util": "^1.0.14" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/dialog": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@v-c/dialog/-/dialog-1.0.3.tgz", + "integrity": "sha512-NfeuaHC1PPaRyekoXN6G9AjRL5L9eQiV9tnkRp62GyCfZsHMFgdwlREW6buHifHe7dk4z/ilvGms5tnbw63R4A==", + "dependencies": { + "@v-c/portal": "^1.0.8", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/drawer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@v-c/drawer/-/drawer-1.0.2.tgz", + "integrity": "sha512-AhLr3avLgWUfAIFiBriHr3+A6/3gkHPxiZgjQDEXpEwkNCEkq+1L05d8kPWnZifHc3gOL/kmOvi1QuxmcZoSmg==", + "license": "MIT", + "dependencies": { + "@v-c/portal": "^1.0.8", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/dropdown": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@v-c/dropdown/-/dropdown-1.0.2.tgz", + "integrity": "sha512-D6TACf3jUiRWx4xW5h2+wVT9SMYxUasFlAHESYJr4ZMjLTLLM1Q8iBjkjhGF+vA0eYR5zqRTwlaacN0DNDZBPw==", + "license": "MIT", + "dependencies": { + "@v-c/trigger": "^1.0.6", + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/image": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/@v-c/image/-/image-1.0.9.tgz", + "integrity": "sha512-0SGcTAopppmo8rjk/E9Kb8kWZ7yIoZeS2XTwnJNs2YOrwvZzY3OJA/5BB/5+siW0uZBe9XKnnO8byS3Frwr2xA==", + "license": "MIT", + "dependencies": { + "@v-c/portal": "^1.0.8", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/input": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@v-c/input/-/input-1.0.3.tgz", + "integrity": "sha512-vQic9OWfREBlNfJeRcejMcOPhp4xnbHVbqeqo/TfCOf73Ym+zjWXRGXiqM/pIqV9v95zuhYen3KzMeJYM4pViA==", + "dependencies": { + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/input-number": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@v-c/input-number/-/input-number-1.0.5.tgz", + "integrity": "sha512-YQBpV1KnuYf0o2XrbC+OEyP6lkyqv1XhzDVh3QhHO2bs/Jr3uSD8b3cxdEGU+gjoNJUcoZx7XiIzcYhLlvMctw==", + "dependencies": { + "@v-c/input": "^1.0.2", + "@v-c/mini-decimal": "^1.0.1", + "@v-c/util": "^1.0.18" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/mentions": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@v-c/mentions/-/mentions-1.0.0.tgz", + "integrity": "sha512-trkG1lvfiaIY7UnHn0gx6B01o3rFLEMin3KGp1q4oU6zOCRWde4ejZ+EHSvmXzOz2N+FlRMTE4EMJFi4w0oOlQ==", + "dependencies": { + "@v-c/input": "^1.0.2", + "@v-c/menu": "^1.0.7", + "@v-c/textarea": "^1.0.3", + "@v-c/trigger": "^1.0.6", + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/menu": { + "version": "1.0.13", + "resolved": "https://registry.npmmirror.com/@v-c/menu/-/menu-1.0.13.tgz", + "integrity": "sha512-RbOuk+R0V2bm04daK5LvlJ95N/XS2k+YSnvrGUDCKVkCIAPEe6NZMU6clcj5F4yKtKwWDggq/n5NlJPfJKFSPA==", + "dependencies": { + "@v-c/overflow": "^1.0.5", + "@v-c/trigger": "^1.0.14", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/mini-decimal": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@v-c/mini-decimal/-/mini-decimal-1.0.1.tgz", + "integrity": "sha512-76wZLdlkI017iDlaZMNOWZyDCv29YVabUJn5urQgIKtW4dnI5AkNXWtmLyhl/mu/OS7ZGisRi5ai/558QhLQxQ==", + "license": "MIT" + }, + "node_modules/@v-c/mutate-observer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@v-c/mutate-observer/-/mutate-observer-1.0.1.tgz", + "integrity": "sha512-84+9KGORX8LY9u+K0DEGyRwRCJaky0sjRkXxBC7X/jahHJl8NQGQ0Gxve5IVwaxRTfZ9eftlRmHs90JD6Utfqg==", + "dependencies": { + "@v-c/resize-observer": "^1.0.8", + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/notification": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@v-c/notification/-/notification-1.0.0.tgz", + "integrity": "sha512-aU5g+ZiYxp0KVdKuho067wJRF38Mv7MrQS95dwSJLsbDmVFBpjO3Lo3ptakfPkwn+7uwRytHKIf39t9QVGk+sg==", + "dependencies": { + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/overflow": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@v-c/overflow/-/overflow-1.0.5.tgz", + "integrity": "sha512-Ae5aSZItOQHYzscs5JcmLPBLLEkpCS6c8IcHv9jABH0lZZGlZiUF4WBkAvSSnU8Q9f14BJ6dEb5XLwbwpyTZEQ==", + "dependencies": { + "@v-c/resize-observer": "^1.0.8", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/pagination": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@v-c/pagination/-/pagination-1.0.0.tgz", + "integrity": "sha512-uYIMkvHKMtY+nwHTu5rXxiq6KPf0zGpZbtQTn1nDPng0tOyA1vLQ+R6OfE+1LOwuQqvFTEDnAq4vb90By+eBfw==", + "dependencies": { + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/picker": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/@v-c/picker/-/picker-1.0.4.tgz", + "integrity": "sha512-B98FSgE+Kh6lNwa5msySFL8NNiF3fFkmFuuL14WEdb4f6q47XYH7YvcQa2jySXnbYPKHdykZMFo37f/0BzFaPw==", + "license": "MIT", + "dependencies": { + "@v-c/overflow": "^1.0.3", + "@v-c/resize-observer": "^1.0.8", + "@v-c/trigger": "^1.0.11", + "@v-c/util": "^1.0.14" + }, + "peerDependencies": { + "date-fns": ">= 2.x", + "dayjs": ">= 1.x", + "luxon": ">= 3.x", + "moment": ">= 2.x", + "vue": "^3.0.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/@v-c/portal": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@v-c/portal/-/portal-1.0.8.tgz", + "integrity": "sha512-93elruWfHKrdtRkpFBNpi47YhQjA75tCuG8C/WvcQ9x/dp+H3i+y7h6t0iyyDjZu1w3d2U5+d43vtslmoQXBYg==", + "dependencies": { + "@v-c/util": "^1.0.18" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/progress": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@v-c/progress/-/progress-1.0.0.tgz", + "integrity": "sha512-kWDTU1uXnPDMmoezwyAECxuSH+WKn92OjSdk/GgDbQgZ0qNy9woOiRe5fOsrcy61agHdJxzf0MvsUy1b6bZVlA==", + "dependencies": { + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/qrcode": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@v-c/qrcode/-/qrcode-1.0.0.tgz", + "integrity": "sha512-OSMrYDhP/NQiUcO6J0X2X8BskHPRqX/E/F9npH3oayZgjCo5Aom+63Ja3J0u6SOmKP1JgLSgjrm5karc0671jw==", + "license": "MIT", + "dependencies": { + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/rate": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@v-c/rate/-/rate-1.0.1.tgz", + "integrity": "sha512-ZWWY01LeKu9S/JncdvSr2gz2Kwwum3bB/AxzzCsuhCyg+9P4BLwX7S2WZDMiJ92uYEpiYladVTCa9XdSCPaCaQ==", + "dependencies": { + "@v-c/util": "^1.0.14" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/resize-observer": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@v-c/resize-observer/-/resize-observer-1.0.8.tgz", + "integrity": "sha512-VH8WBsNfZA5KQ+CXVaQ1PK5B6FIHnuTdqOLrjRWiZTrIYDZi/MyREi9b21YDj55fbFWMRx4yapnO9tiZX1RNxA==", + "dependencies": { + "@v-c/util": "^1.0.9", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/segmented": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@v-c/segmented/-/segmented-1.0.1.tgz", + "integrity": "sha512-qEaHzJxl3gfuZNn754iUcC+YrvPih0luD/wr51VInwOKQgEqaIm5R0fzs3uO57aA4zCuXrDn5LK0z6rFOF+IbQ==", + "license": "MIT", + "dependencies": { + "@v-c/util": "^1.0.17" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/select": { + "version": "1.0.20", + "resolved": "https://registry.npmmirror.com/@v-c/select/-/select-1.0.20.tgz", + "integrity": "sha512-gmG5U7r8YgXIjGQZ5qjHM3felSlYAep7pBjJRzA8ALgHhx0CKRk6RTadVDXzWh7LwOFvlgTn7OLUMTU6RACoaQ==", + "license": "MIT", + "dependencies": { + "@v-c/overflow": "^1.0.4", + "@v-c/trigger": "^1.0.13", + "@v-c/util": "^1.0.18", + "@v-c/virtual-list": "^1.0.6" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/slick": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@v-c/slick/-/slick-1.0.2.tgz", + "integrity": "sha512-8BbPxJgYST+tio9jyeFQgJb/3XSFhfWZN8Am7YVYeqsYsvn3g8wu61UZNSjlkp9ArOEe+ujOgX4izfDHeXh4RA==", + "dependencies": { + "@v-c/util": "^1.0.17", + "es-toolkit": "^1.43.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/slider": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/@v-c/slider/-/slider-1.0.10.tgz", + "integrity": "sha512-KMIVytBm8K8RQ+aPPraS28GmBptGHESF/gDRbGjOLD7xyivuQDJeEqVaUFY3EcCWsERjh4VP/L96gUbMTF0uag==", + "license": "MIT", + "dependencies": { + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/steps": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@v-c/steps/-/steps-1.0.0.tgz", + "integrity": "sha512-DPL0OOb8pDLlTPZB93b8+Saxiz6V5zEpGXKaCnsbXUuOhimkc7089AuEKfpMw+8x1SrVe+gapWf5RRHWXUm2pg==", + "dependencies": { + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/switch": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@v-c/switch/-/switch-1.0.0.tgz", + "integrity": "sha512-VIem244KJkYfqDgofpgHjK00sGL9rJ/9OtmK4Gbs4hnPsrTtzHDBRltYxR4IT7HQleathZfj6NhcZ1bjdWKYUw==", + "dependencies": { + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/table": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@v-c/table/-/table-1.0.3.tgz", + "integrity": "sha512-VsklYM8M/fSrx+djBJJ0+nUiyzav9w3kZQYtojCnLPg2d2BKORtDKw8WRcpIaZZjDUSJcOh9LOSoY7GA+JKwBQ==", + "dependencies": { + "@v-c/resize-observer": "^1.0.8", + "@v-c/util": "^1.0.18", + "@v-c/virtual-list": "^1.0.6" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/tabs": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@v-c/tabs/-/tabs-1.0.2.tgz", + "integrity": "sha512-FA/lG5TaYOVFhB3WjJ2x6O8egREm9FWdfEbnY1Tmg3D1avkxYDhISHlW4ot3NvWb8Ds4MxBe0T9xg206o0LHEw==", + "license": "MIT", + "dependencies": { + "@v-c/dropdown": "^1.0.2", + "@v-c/menu": "^1.0.12", + "@v-c/overflow": "^1.0.4", + "@v-c/resize-observer": "^1.0.8", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/textarea": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/@v-c/textarea/-/textarea-1.0.4.tgz", + "integrity": "sha512-VrQrLjKsiFh3bngXDULK+mUI4RmTT0hqDOUChsGmo5dZGgcmzsDbVLFluYCvpV+InUsnn2jGSQEuqMQy1Vga+g==", + "dependencies": { + "@v-c/input": "^1.0.3", + "@v-c/resize-observer": "^1.0.8", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/tooltip": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@v-c/tooltip/-/tooltip-1.0.3.tgz", + "integrity": "sha512-72EkTfhb67RPJvMXIW6HUYiZ+Jdrb7tBQmS3wDtFDNU7uIrS5DQLyXJDCu9qWlrPv7cQ/RHA4JfCINw88vchzw==", + "license": "MIT", + "dependencies": { + "@v-c/trigger": "^1.0.11", + "@v-c/util": "^1.0.13" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/tour": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@v-c/tour/-/tour-1.0.3.tgz", + "integrity": "sha512-y4DVJPP7jvL+MWUMAKQWxLAMXSWJEfZXaKASPn3DKbSQ8drBhsjMXwcep3glAfrCjCKfj/QD3OrUMxqydi4qFw==", + "license": "MIT", + "dependencies": { + "@v-c/portal": "^1.0.6", + "@v-c/trigger": "^1.0.6", + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/tree": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@v-c/tree/-/tree-1.0.5.tgz", + "integrity": "sha512-u6tja/kV9mupXWhFT+RtLUVqhCvNtb7LHuKkh4pka8sy5goQ7MjIODciuXn8mizIlEw3rGopq7C7auC9Sg1K8w==", + "license": "MIT", + "dependencies": { + "@v-c/util": "^1.0.18", + "@v-c/virtual-list": "^1.0.6" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/tree-select": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@v-c/tree-select/-/tree-select-1.0.3.tgz", + "integrity": "sha512-N4mK8JXrCU+GFfhLG/zat3TAUt0Ju+P4S3hN6PlmuHPikQ4OWEA91CA8Br83i4zpW9TCH7xP0EfMUvhLtjqbsA==", + "license": "MIT", + "dependencies": { + "@v-c/select": "^1.0.19", + "@v-c/tree": "^1.0.5", + "@v-c/util": "^1.0.18" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/trigger": { + "version": "1.0.14", + "resolved": "https://registry.npmmirror.com/@v-c/trigger/-/trigger-1.0.14.tgz", + "integrity": "sha512-3flCLvHvW2fJ8Rg/m4kCk7UGtL9GsrPgeSbdQJ1FU5+sZmfT2bcPwQZM824e7VFLmgaYPLiaQOL3l46uEPFWLw==", + "license": "MIT", + "dependencies": { + "@v-c/portal": "^1.0.8", + "@v-c/resize-observer": "^1.0.8", + "@v-c/util": "^1.0.19" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/upload": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@v-c/upload/-/upload-1.0.0.tgz", + "integrity": "sha512-W92PNCD61aM/B5w8oUzHQSDHur1T8484726Ls0IoNMO5nPiF/15eEE3RuuI/t7xXQVP/fA06hNSwzXwGWdDg1w==", + "dependencies": { + "@v-c/util": "^1.0.9" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/util": { + "version": "1.0.19", + "resolved": "https://registry.npmmirror.com/@v-c/util/-/util-1.0.19.tgz", + "integrity": "sha512-apJGS4BVzhXbrNR6jxXF18jAiOWIn/UNmGjgSvB5r4ba9Wr/ireKCfJvhuuNsZi+scLaM0W3ghB81PbQ5vwoJg==", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@v-c/virtual-list": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@v-c/virtual-list/-/virtual-list-1.0.6.tgz", + "integrity": "sha512-eXGbU1zME4pXAfQSBfhp1BkqBP3XYSX03CRJg7tsHgwXoaw8DE7pLuxzFSa+COJ66oOdYn99XS/sHTiz34aQCA==", + "license": "MIT", + "dependencies": { + "@v-c/resize-observer": "^1.0.8", + "@v-c/util": "^1.0.14" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.5.tgz", + "integrity": "sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue-macros/common": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@vue-macros/common/-/common-3.1.2.tgz", + "integrity": "sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "^3.5.22", + "ast-kit": "^2.1.2", + "local-pkg": "^1.1.2", + "magic-string-ast": "^1.0.2", + "unplugin-utils": "^0.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/vue-macros" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.31.tgz", + "integrity": "sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.31", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.31.tgz", + "integrity": "sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.31", + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.31.tgz", + "integrity": "sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.31", + "@vue/compiler-dom": "3.5.31", + "@vue/compiler-ssr": "3.5.31", + "@vue/shared": "3.5.31", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.31.tgz", + "integrity": "sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.31", + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-3.2.6.tgz", + "integrity": "sha512-xYYYX3/aVup576tP/23sEUpgiEnujrENaoNRbaozC1/MA9I6EGFQRJb4xrt/MmUCAGlxTKL2RmT8JLTPqagCkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.0.0", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.31.tgz", + "integrity": "sha512-DtKXxk9E/KuVvt8VxWu+6Luc9I9ETNcqR1T1oW1gf02nXaZ1kuAx58oVu7uX9XxJR0iJCro6fqBLw9oSBELo5g==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.31.tgz", + "integrity": "sha512-AZPmIHXEAyhpkmN7aWlqjSfYynmkWlluDNPHMCZKFHH+lLtxP/30UJmoVhXmbDoP1Ng0jG0fyY2zCj1PnSSA6Q==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.31", + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.31.tgz", + "integrity": "sha512-xQJsNRmGPeDCJq/u813tyonNgWBFjzfVkBwDREdEWndBnGdHLHgkwNBQxLtg4zDrzKTEcnikUy1UUNecb3lJ6g==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.31", + "@vue/runtime-core": "3.5.31", + "@vue/shared": "3.5.31", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.31.tgz", + "integrity": "sha512-GJuwRvMcdZX/CriUnyIIOGkx3rMV3H6sOu0JhdKbduaeCji6zb60iOGMY7tFoN24NfsUYoFBhshZtGxGpxO4iA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.31", + "@vue/shared": "3.5.31" + }, + "peerDependencies": { + "vue": "3.5.31" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.31.tgz", + "integrity": "sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "14.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-14.2.1.tgz", + "integrity": "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-14.2.1.tgz", + "integrity": "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-14.2.1.tgz", + "integrity": "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/alien-signals": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/alien-signals/-/alien-signals-3.1.2.tgz", + "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/antdv-next": { + "version": "1.1.8", + "resolved": "https://registry.npmmirror.com/antdv-next/-/antdv-next-1.1.8.tgz", + "integrity": "sha512-Z8JwWiRJFZX8Acc1a3cDxhwuWylSwGq2lAGo8L0XBE8dXdJajYUw5FJSkDmLMpWHdsWnO/gG+PEZpgTSntpB5Q==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^8.0.1", + "@ant-design/fast-color": "^3.0.1", + "@antdv-next/cssinjs": "^1.0.6", + "@antdv-next/icons": "^1.0.6", + "@v-c/async-validator": "^1.0.1", + "@v-c/cascader": "^1.0.2", + "@v-c/checkbox": "^1.0.1", + "@v-c/collapse": "^1.0.0", + "@v-c/color-picker": "^1.0.6", + "@v-c/dialog": "^1.0.3", + "@v-c/drawer": "^1.0.2", + "@v-c/dropdown": "^1.0.2", + "@v-c/image": "^1.0.9", + "@v-c/input": "^1.0.3", + "@v-c/input-number": "^1.0.5", + "@v-c/mentions": "^1.0.0", + "@v-c/menu": "^1.0.12", + "@v-c/mutate-observer": "^1.0.1", + "@v-c/notification": "^1.0.0", + "@v-c/pagination": "^1.0.0", + "@v-c/picker": "^1.0.4", + "@v-c/progress": "^1.0.0", + "@v-c/qrcode": "^1.0.0", + "@v-c/rate": "^1.0.1", + "@v-c/resize-observer": "^1.0.8", + "@v-c/segmented": "^1.0.1", + "@v-c/select": "^1.0.20", + "@v-c/slick": "^1.0.2", + "@v-c/slider": "^1.0.10", + "@v-c/steps": "^1.0.0", + "@v-c/switch": "^1.0.0", + "@v-c/table": "^1.0.3", + "@v-c/tabs": "^1.0.2", + "@v-c/textarea": "^1.0.4", + "@v-c/tooltip": "^1.0.3", + "@v-c/tour": "^1.0.3", + "@v-c/tree": "^1.0.5", + "@v-c/tree-select": "^1.0.3", + "@v-c/trigger": "^1.0.14", + "@v-c/upload": "^1.0.0", + "@v-c/util": "^1.0.19", + "@v-c/virtual-list": "^1.0.6", + "@vueuse/core": "^14.2.1", + "dayjs": "^1.11.20", + "es-toolkit": "1.45.1", + "scroll-into-view-if-needed": "^3.1.0", + "throttle-debounce": "^5.0.2" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ast-kit": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/ast-kit/-/ast-kit-2.2.0.tgz", + "integrity": "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/ast-walker-scope/-/ast-walker-scope-0.8.3.tgz", + "integrity": "sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "ast-kit": "^2.1.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.14.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.14.0.tgz", + "integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/co-body": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/co-body/-/co-body-6.2.0.tgz", + "integrity": "sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hapi/bourne": "^3.0.0", + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/codemirror": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/codemirror/-/codemirror-6.0.2.tgz", + "integrity": "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/dompurify": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-3.3.3.tgz", + "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/echarts": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-6.0.0.tgz", + "integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "2.3.0", + "zrender": "6.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-toolkit": { + "version": "1.45.1", + "resolved": "https://registry.npmmirror.com/es-toolkit/-/es-toolkit-1.45.1.tgz", + "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmmirror.com/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-status": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/http-status/-/http-status-2.1.0.tgz", + "integrity": "sha512-O5kPr7AW7wYd/BBiOezTwnVAnmSNFY+J7hlZD2X5IOxVBetjcHAiTXhzj0gMrnojQlwy+UT1/Y3H3vJ3UlmvLA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "dev": true, + "license": "MIT" + }, + "node_modules/inflation": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/inflation/-/inflation-2.1.0.tgz", + "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/katex": { + "version": "0.16.44", + "resolved": "https://registry.npmmirror.com/katex/-/katex-0.16.44.tgz", + "integrity": "sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/linkifyjs": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/linkifyjs/-/linkifyjs-4.3.2.tgz", + "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==", + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magic-string-ast": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/magic-string-ast/-/magic-string-ast-1.0.3.tgz", + "integrity": "sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.19" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "longest-streak": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "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" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "5.1.7", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.7.tgz", + "integrity": "sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT" + }, + "node_modules/oxfmt": { + "version": "0.43.0", + "resolved": "https://registry.npmmirror.com/oxfmt/-/oxfmt-0.43.0.tgz", + "integrity": "sha512-KTYNG5ISfHSdmeZ25Xzb3qgz9EmQvkaGAxgBY/p38+ZiAet3uZeu7FnMwcSQJg152Qwl0wnYAxDc+Z/H6cvrwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinypool": "2.1.0" + }, + "bin": { + "oxfmt": "bin/oxfmt" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxfmt/binding-android-arm-eabi": "0.43.0", + "@oxfmt/binding-android-arm64": "0.43.0", + "@oxfmt/binding-darwin-arm64": "0.43.0", + "@oxfmt/binding-darwin-x64": "0.43.0", + "@oxfmt/binding-freebsd-x64": "0.43.0", + "@oxfmt/binding-linux-arm-gnueabihf": "0.43.0", + "@oxfmt/binding-linux-arm-musleabihf": "0.43.0", + "@oxfmt/binding-linux-arm64-gnu": "0.43.0", + "@oxfmt/binding-linux-arm64-musl": "0.43.0", + "@oxfmt/binding-linux-ppc64-gnu": "0.43.0", + "@oxfmt/binding-linux-riscv64-gnu": "0.43.0", + "@oxfmt/binding-linux-riscv64-musl": "0.43.0", + "@oxfmt/binding-linux-s390x-gnu": "0.43.0", + "@oxfmt/binding-linux-x64-gnu": "0.43.0", + "@oxfmt/binding-linux-x64-musl": "0.43.0", + "@oxfmt/binding-openharmony-arm64": "0.43.0", + "@oxfmt/binding-win32-arm64-msvc": "0.43.0", + "@oxfmt/binding-win32-ia32-msvc": "0.43.0", + "@oxfmt/binding-win32-x64-msvc": "0.43.0" + } + }, + "node_modules/oxlint": { + "version": "1.58.0", + "resolved": "https://registry.npmmirror.com/oxlint/-/oxlint-1.58.0.tgz", + "integrity": "sha512-t4s9leczDMqlvOSjnbCQe7gtoLkWgBGZ7sBdCJ9EOj5IXFSG/X7OAzK4yuH4iW+4cAYe8kLFbC8tuYMwWZm+Cg==", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.58.0", + "@oxlint/binding-android-arm64": "1.58.0", + "@oxlint/binding-darwin-arm64": "1.58.0", + "@oxlint/binding-darwin-x64": "1.58.0", + "@oxlint/binding-freebsd-x64": "1.58.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.58.0", + "@oxlint/binding-linux-arm-musleabihf": "1.58.0", + "@oxlint/binding-linux-arm64-gnu": "1.58.0", + "@oxlint/binding-linux-arm64-musl": "1.58.0", + "@oxlint/binding-linux-ppc64-gnu": "1.58.0", + "@oxlint/binding-linux-riscv64-gnu": "1.58.0", + "@oxlint/binding-linux-riscv64-musl": "1.58.0", + "@oxlint/binding-linux-s390x-gnu": "1.58.0", + "@oxlint/binding-linux-x64-gnu": "1.58.0", + "@oxlint/binding-linux-x64-musl": "1.58.0", + "@oxlint/binding-openharmony-arm64": "1.58.0", + "@oxlint/binding-win32-arm64-msvc": "1.58.0", + "@oxlint/binding-win32-ia32-msvc": "1.58.0", + "@oxlint/binding-win32-x64-msvc": "1.58.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=0.18.0" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + } + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.4.tgz", + "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.7" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.5.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinyin-pro": { + "version": "3.28.0", + "resolved": "https://registry.npmmirror.com/pinyin-pro/-/pinyin-pro-3.28.0.tgz", + "integrity": "sha512-mMRty6RisoyYNphJrTo3pnvp3w8OMZBrXm9YSWkxhAfxKj1KZk2y8T2PDIZlDDRsvZ0No+Hz6FI4sZpA6Ey25g==", + "license": "MIT" + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/prosemirror-changeset": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/prosemirror-changeset/-/prosemirror-changeset-2.4.0.tgz", + "integrity": "sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng==", + "license": "MIT", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-collab": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", + "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", + "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.10.2" + } + }, + "node_modules/prosemirror-drop-indicator": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/prosemirror-drop-indicator/-/prosemirror-drop-indicator-0.1.3.tgz", + "integrity": "sha512-fJV6G2tHIVXZLUuc60fS9ly1/GuGOlAZUm67S1El+kGFUYh27Hyv6hcGx3rrJ+Q/JZL5jnyAibIZYYWpPqE45g==", + "license": "MIT", + "dependencies": { + "@ocavue/utils": "^1.0.0", + "prosemirror-model": "^1.25.4", + "prosemirror-state": "^1.4.4", + "prosemirror-view": "^1.41.3" + }, + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", + "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz", + "integrity": "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/prosemirror-history/-/prosemirror-history-1.5.0.tgz", + "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz", + "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", + "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-markdown": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/prosemirror-markdown/-/prosemirror-markdown-1.13.4.tgz", + "integrity": "sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==", + "license": "MIT", + "dependencies": { + "@types/markdown-it": "^14.0.0", + "markdown-it": "^14.0.0", + "prosemirror-model": "^1.25.0" + } + }, + "node_modules/prosemirror-menu": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/prosemirror-menu/-/prosemirror-menu-1.3.0.tgz", + "integrity": "sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg==", + "license": "MIT", + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.25.4", + "resolved": "https://registry.npmmirror.com/prosemirror-model/-/prosemirror-model-1.25.4.tgz", + "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==", + "license": "MIT", + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-safari-ime-span": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/prosemirror-safari-ime-span/-/prosemirror-safari-ime-span-1.0.2.tgz", + "integrity": "sha512-QJqD8s1zE/CuK56kDsUhndh5hiHh/gFnAuPOA9ytva2s85/ZEt2tNWeALTJN48DtWghSKOmiBsvVn2OlnJ5H2w==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.4.3", + "prosemirror-view": "^1.33.8" + }, + "funding": { + "url": "https://github.com/sponsors/ocavue" + } + }, + "node_modules/prosemirror-schema-basic": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz", + "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.25.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", + "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/prosemirror-state/-/prosemirror-state-1.4.4.tgz", + "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.8.5", + "resolved": "https://registry.npmmirror.com/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz", + "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.2.3", + "prosemirror-model": "^1.25.4", + "prosemirror-state": "^1.4.4", + "prosemirror-transform": "^1.10.5", + "prosemirror-view": "^1.41.4" + } + }, + "node_modules/prosemirror-trailing-node": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", + "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", + "license": "MIT", + "dependencies": { + "@remirror/core-constants": "3.0.0", + "escape-string-regexp": "^4.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.22.1", + "prosemirror-state": "^1.4.2", + "prosemirror-view": "^1.33.8" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.12.0", + "resolved": "https://registry.npmmirror.com/prosemirror-transform/-/prosemirror-transform-1.12.0.tgz", + "integrity": "sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.21.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.41.8", + "resolved": "https://registry.npmmirror.com/prosemirror-view/-/prosemirror-view-1.41.8.tgz", + "integrity": "sha512-TnKDdohEatgyZNGCDWIdccOHXhYloJwbwU+phw/a23KBvJIR9lWQWW7WHHK3vBdOLDNuF7TaX98GObUZOWkOnA==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, + "node_modules/prosemirror-virtual-cursor": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/prosemirror-virtual-cursor/-/prosemirror-virtual-cursor-0.4.2.tgz", + "integrity": "sha512-pUMKnIuOhhnMcgIJUjhIQTVJruBEGxfMBVQSrK0g2qhGPDm1i12KdsVaFw15dYk+29tZcxjMeR7P5VDKwmbwJg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ocavue" + }, + "peerDependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + }, + "peerDependenciesMeta": { + "prosemirror-model": { + "optional": true + }, + "prosemirror-state": { + "optional": true + }, + "prosemirror-view": { + "optional": true + } + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/refractor": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/refractor/-/refractor-5.0.0.tgz", + "integrity": "sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/prismjs": "^1.0.0", + "hastscript": "^9.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark": { + "version": "15.0.1", + "resolved": "https://registry.npmmirror.com/remark/-/remark-15.0.1.tgz", + "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-inline-links": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/remark-inline-links/-/remark-inline-links-7.0.0.tgz", + "integrity": "sha512-4uj1pPM+F495ySZhTIB6ay2oSkTsKgmYaKk/q5HIdhX2fuyLEegpjWa0VdJRJ01sgOqAFo7MBKdDUejIYBMVMQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-definitions": "^6.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-math": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/remark-math/-/remark-math-6.0.0.tgz", + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-math": "^3.0.0", + "micromark-extension-math": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/rolldown/-/rolldown-1.0.0-rc.12.tgz", + "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.122.0", + "@rolldown/pluginutils": "1.0.0-rc.12" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-x64": "1.0.0-rc.12", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", + "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.98.0", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.98.0.tgz", + "integrity": "sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/style-mod": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.1.3.tgz", + "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==", + "license": "MIT" + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.2.2.tgz", + "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "license": "MIT", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/tinypool/-/tinypool-2.1.0.tgz", + "integrity": "sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.0.0 || >=22.0.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-3.0.0.tgz", + "integrity": "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/vite/-/vite-8.0.3.tgz", + "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.8", + "rolldown": "1.0.0-rc.12", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.0", + "esbuild": "^0.27.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-mock-dev-server": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/vite-plugin-mock-dev-server/-/vite-plugin-mock-dev-server-2.1.1.tgz", + "integrity": "sha512-N49IFCZvy6PJY8VjJjYD8tuA7BJc5OgTLZmR83UrjFgRcQKPo0t4jPzVijalFtwA0P9v0apLXkVeNcZKytX6EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pengzhanbo/utils": "^3.3.1", + "ansis": "^4.2.0", + "chokidar": "^5.0.0", + "co-body": "^6.2.0", + "cors": "^2.8.6", + "debug": "^4.4.3", + "formidable": "3.5.4", + "http-status": "^2.1.0", + "is-core-module": "^2.16.1", + "json5": "^2.2.3", + "local-pkg": "^1.1.2", + "mime-types": "^3.0.2", + "path-to-regexp": "^8.3.0", + "picomatch": "^4.0.4", + "tinyglobby": "^0.2.15", + "ws": "^8.20.0" + }, + "engines": { + "node": "^20 || >=22" + }, + "peerDependencies": { + "esbuild": ">=0.21.0", + "rolldown": ">=1.0.0-beta.1", + "vite": ">=5.0.0", + "zstd-codec": ">=0.1.5" + }, + "peerDependenciesMeta": { + "esbuild": { + "optional": true + }, + "rolldown": { + "optional": true + }, + "zstd-codec": { + "optional": true + } + } + }, + "node_modules/vite-plugin-mock-dev-server/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vite-plugin-mock-dev-server/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/vite-plugin-mock-dev-server/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/vite-plugin-mock-dev-server/node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.31", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.31.tgz", + "integrity": "sha512-iV/sU9SzOlmA/0tygSmjkEN6Jbs3nPoIPFhCMLD2STrjgOU8DX7ZtzMhg4ahVwf5Rp9KoFzcXeB1ZrVbLBp5/Q==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.31", + "@vue/compiler-sfc": "3.5.31", + "@vue/runtime-dom": "3.5.31", + "@vue/server-renderer": "3.5.31", + "@vue/shared": "3.5.31" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-codemirror": { + "version": "6.1.1", + "resolved": "https://registry.npmmirror.com/vue-codemirror/-/vue-codemirror-6.1.1.tgz", + "integrity": "sha512-rTAYo44owd282yVxKtJtnOi7ERAcXTeviwoPXjIc6K/IQYUsoDkzPvw/JDFtSP6T7Cz/2g3EHaEyeyaQCKoDMg==", + "license": "MIT", + "dependencies": { + "@codemirror/commands": "6.x", + "@codemirror/language": "6.x", + "@codemirror/state": "6.x", + "@codemirror/view": "6.x" + }, + "peerDependencies": { + "codemirror": "6.x", + "vue": "3.x" + } + }, + "node_modules/vue-echarts": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/vue-echarts/-/vue-echarts-8.0.1.tgz", + "integrity": "sha512-23rJTFLu1OUEGRWjJGmdGt8fP+8+ja1gVgzMYPIPaHWpXegcO1viIAaeu2H4QHESlVeHzUAHIxKXGrwjsyXAaA==", + "license": "MIT", + "peerDependencies": { + "echarts": "^6.0.0", + "vue": "^3.3.0" + } + }, + "node_modules/vue-i18n": { + "version": "11.3.0", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.3.0.tgz", + "integrity": "sha512-1J+xDfDJTLhDxElkd3+XUhT7FYSZd2b8pa7IRKGxhWH/8yt6PTvi3xmWhGwhYT5EaXdatui11pF2R6tL73/zPA==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.3.0", + "@intlify/devtools-types": "11.3.0", + "@intlify/shared": "11.3.0", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-i18n/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/vue-router": { + "version": "5.0.4", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-5.0.4.tgz", + "integrity": "sha512-lCqDLCI2+fKVRl2OzXuzdSWmxXFLQRxQbmHugnRpTMyYiT+hNaycV0faqG5FBHDXoYrZ6MQcX87BvbY8mQ20Bg==", + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.28.6", + "@vue-macros/common": "^3.1.1", + "@vue/devtools-api": "^8.0.6", + "ast-walker-scope": "^0.8.3", + "chokidar": "^5.0.0", + "json5": "^2.2.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "muggle-string": "^0.4.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "scule": "^1.3.0", + "tinyglobby": "^0.2.15", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1", + "yaml": "^2.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@pinia/colada": ">=0.21.2", + "@vue/compiler-sfc": "^3.5.17", + "pinia": "^3.0.4", + "vue": "^3.5.0" + }, + "peerDependenciesMeta": { + "@pinia/colada": { + "optional": true + }, + "@vue/compiler-sfc": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-8.1.1.tgz", + "integrity": "sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.1.1" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-kit": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.1.1.tgz", + "integrity": "sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.1.1", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-shared": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-8.1.1.tgz", + "integrity": "sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==", + "license": "MIT" + }, + "node_modules/vue-router/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vue-router/node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "license": "MIT" + }, + "node_modules/vue-router/node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vue-tsc": { + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-3.2.6.tgz", + "integrity": "sha512-gYW/kWI0XrwGzd0PKc7tVB/qpdeAkIZLNZb10/InizkQjHjnT8weZ/vBarZoj4kHKbUTZT/bAVgoOr8x4NsQ/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.2.6" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "license": "MIT", + "dependencies": { + "sortablejs": "1.14.0" + }, + "peerDependencies": { + "vue": "^3.0.1" + } + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/zrender": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-6.0.0.tgz", + "integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/antdv-next-admin/package.json b/antdv-next-admin/package.json new file mode 100644 index 0000000..13458b1 --- /dev/null +++ b/antdv-next-admin/package.json @@ -0,0 +1,101 @@ +{ + "name": "antdv-next-admin", + "version": "1.0.0", + "type": "module", + "description": "A modern Vue 3 admin scaffold based on antdv-next", + "scripts": { + "dev": "vite", + "build": "vite build", + "build:check": "vue-tsc && vite build", + "preview": "vite preview", + "type-check": "vue-tsc --noEmit", + "lint": "oxlint src mock", + "lint:fix": "oxlint --fix src mock", + "format": "oxfmt --write src mock", + "format:check": "oxfmt --check src mock" + }, + "dependencies": { + "@ant-design/colors": "^8.0.1", + "@antdv-next/icons": "^1.0.6", + "@codemirror/autocomplete": "^6.20.1", + "@codemirror/commands": "^6.10.3", + "@codemirror/lang-css": "^6.3.1", + "@codemirror/lang-go": "^6.0.1", + "@codemirror/lang-html": "^6.4.11", + "@codemirror/lang-java": "^6.0.2", + "@codemirror/lang-javascript": "^6.2.4", + "@codemirror/lang-json": "^6.0.2", + "@codemirror/lang-markdown": "^6.5.0", + "@codemirror/lang-php": "^6.0.2", + "@codemirror/lang-python": "^6.2.1", + "@codemirror/lang-rust": "^6.0.2", + "@codemirror/lang-sql": "^6.10.0", + "@codemirror/lang-xml": "^6.1.0", + "@codemirror/lang-yaml": "^6.1.3", + "@codemirror/language": "^6.12.3", + "@codemirror/lint": "^6.9.5", + "@codemirror/search": "^6.6.0", + "@codemirror/state": "^6.6.0", + "@codemirror/theme-one-dark": "^6.1.3", + "@codemirror/view": "^6.41.0", + "@iconify-json/ion": "^1.2.6", + "@iconify-json/mdi": "^1.2.3", + "@iconify-json/ri": "^1.2.10", + "@iconify/vue": "^5.0.0", + "@milkdown/core": "^7.20.0", + "@milkdown/ctx": "^7.20.0", + "@milkdown/plugin-block": "^7.20.0", + "@milkdown/plugin-clipboard": "^7.20.0", + "@milkdown/plugin-history": "^7.20.0", + "@milkdown/plugin-listener": "^7.20.0", + "@milkdown/plugin-prism": "^7.20.0", + "@milkdown/plugin-slash": "^7.20.0", + "@milkdown/plugin-tooltip": "^7.20.0", + "@milkdown/plugin-upload": "^7.20.0", + "@milkdown/preset-commonmark": "^7.20.0", + "@milkdown/preset-gfm": "^7.20.0", + "@milkdown/theme-nord": "^7.20.0", + "@milkdown/transformer": "^7.20.0", + "@milkdown/vue": "^7.20.0", + "@tiptap/extension-image": "^3.22.1", + "@tiptap/extension-link": "^3.22.1", + "@tiptap/extension-placeholder": "^3.22.1", + "@tiptap/starter-kit": "^3.22.1", + "@tiptap/vue-3": "^3.22.1", + "@uiw/codemirror-theme-dracula": "^4.25.9", + "@uiw/codemirror-theme-github": "^4.25.9", + "@uiw/codemirror-theme-material": "^4.25.9", + "@uiw/codemirror-theme-monokai": "^4.25.9", + "@uiw/codemirror-theme-nord": "^4.25.9", + "@uiw/codemirror-theme-solarized": "^4.25.9", + "@uiw/codemirror-theme-tokyo-night": "^4.25.9", + "@uiw/codemirror-themes": "^4.25.9", + "antdv-next": "^1.1.8", + "axios": "^1.14.0", + "dayjs": "^1.11.20", + "echarts": "^6.0.0", + "lodash-es": "^4.18.1", + "pinia": "^3.0.4", + "pinyin-pro": "^3.28.0", + "vue": "^3.5.31", + "vue-codemirror": "^6.1.1", + "vue-echarts": "^8.0.1", + "vue-i18n": "^11.3.0", + "vue-router": "^5.0.4", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@faker-js/faker": "^10.4.0", + "@tailwindcss/vite": "^4.2.2", + "@types/lodash-es": "^4.17.12", + "@vitejs/plugin-vue": "^6.0.4", + "oxfmt": "^0.43.0", + "oxlint": "^1.58.0", + "sass": "^1.69.7", + "tailwindcss": "^4.2.2", + "typescript": "^6.0.2", + "vite": "^8.0.3", + "vite-plugin-mock-dev-server": "^2.1.1", + "vue-tsc": "^3.2.6" + } +} \ No newline at end of file diff --git a/antdv-next-admin/pnpm-lock.yaml b/antdv-next-admin/pnpm-lock.yaml new file mode 100644 index 0000000..7480958 --- /dev/null +++ b/antdv-next-admin/pnpm-lock.yaml @@ -0,0 +1,6014 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@ant-design/colors': + specifier: ^8.0.1 + version: 8.0.1 + '@antdv-next/icons': + specifier: ^1.0.6 + version: 1.0.6(vue@3.5.33(typescript@6.0.3)) + '@codemirror/autocomplete': + specifier: ^6.20.1 + version: 6.20.1 + '@codemirror/commands': + specifier: ^6.10.3 + version: 6.10.3 + '@codemirror/lang-css': + specifier: ^6.3.1 + version: 6.3.1 + '@codemirror/lang-go': + specifier: ^6.0.1 + version: 6.0.1 + '@codemirror/lang-html': + specifier: ^6.4.11 + version: 6.4.11 + '@codemirror/lang-java': + specifier: ^6.0.2 + version: 6.0.2 + '@codemirror/lang-javascript': + specifier: ^6.2.4 + version: 6.2.5 + '@codemirror/lang-json': + specifier: ^6.0.2 + version: 6.0.2 + '@codemirror/lang-markdown': + specifier: ^6.5.0 + version: 6.5.0 + '@codemirror/lang-php': + specifier: ^6.0.2 + version: 6.0.2 + '@codemirror/lang-python': + specifier: ^6.2.1 + version: 6.2.1 + '@codemirror/lang-rust': + specifier: ^6.0.2 + version: 6.0.2 + '@codemirror/lang-sql': + specifier: ^6.10.0 + version: 6.10.0 + '@codemirror/lang-xml': + specifier: ^6.1.0 + version: 6.1.0 + '@codemirror/lang-yaml': + specifier: ^6.1.3 + version: 6.1.3 + '@codemirror/language': + specifier: ^6.12.3 + version: 6.12.3 + '@codemirror/lint': + specifier: ^6.9.5 + version: 6.9.5 + '@codemirror/search': + specifier: ^6.6.0 + version: 6.6.0 + '@codemirror/state': + specifier: ^6.6.0 + version: 6.6.0 + '@codemirror/theme-one-dark': + specifier: ^6.1.3 + version: 6.1.3 + '@codemirror/view': + specifier: ^6.41.0 + version: 6.41.1 + '@iconify-json/ion': + specifier: ^1.2.6 + version: 1.2.7 + '@iconify-json/mdi': + specifier: ^1.2.3 + version: 1.2.3 + '@iconify-json/ri': + specifier: ^1.2.10 + version: 1.2.10 + '@iconify/vue': + specifier: ^5.0.0 + version: 5.0.0(vue@3.5.33(typescript@6.0.3)) + '@milkdown/core': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/ctx': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/plugin-block': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/plugin-clipboard': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/plugin-history': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/plugin-listener': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/plugin-prism': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/plugin-slash': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/plugin-tooltip': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/plugin-upload': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/preset-commonmark': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/preset-gfm': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/theme-nord': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/transformer': + specifier: ^7.20.0 + version: 7.20.0 + '@milkdown/vue': + specifier: ^7.20.0 + version: 7.20.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)) + '@tiptap/extension-image': + specifier: ^3.22.1 + version: 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-link': + specifier: ^3.22.1 + version: 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-placeholder': + specifier: ^3.22.1 + version: 3.22.5(@tiptap/extensions@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)) + '@tiptap/starter-kit': + specifier: ^3.22.1 + version: 3.22.5 + '@tiptap/vue-3': + specifier: ^3.22.1 + version: 3.22.5(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(vue@3.5.33(typescript@6.0.3)) + '@uiw/codemirror-theme-dracula': + specifier: ^4.25.9 + version: 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + '@uiw/codemirror-theme-github': + specifier: ^4.25.9 + version: 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + '@uiw/codemirror-theme-material': + specifier: ^4.25.9 + version: 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + '@uiw/codemirror-theme-monokai': + specifier: ^4.25.9 + version: 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + '@uiw/codemirror-theme-nord': + specifier: ^4.25.9 + version: 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + '@uiw/codemirror-theme-solarized': + specifier: ^4.25.9 + version: 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + '@uiw/codemirror-theme-tokyo-night': + specifier: ^4.25.9 + version: 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + '@uiw/codemirror-themes': + specifier: ^4.25.9 + version: 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + antdv-next: + specifier: ^1.1.8 + version: 1.2.2(vue@3.5.33(typescript@6.0.3)) + axios: + specifier: ^1.14.0 + version: 1.15.2 + dayjs: + specifier: ^1.11.20 + version: 1.11.20 + echarts: + specifier: ^6.0.0 + version: 6.0.0 + lodash-es: + specifier: ^4.18.1 + version: 4.18.1 + pinia: + specifier: ^3.0.4 + version: 3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)) + pinyin-pro: + specifier: ^3.28.0 + version: 3.28.0 + vue: + specifier: ^3.5.31 + version: 3.5.33(typescript@6.0.3) + vue-codemirror: + specifier: ^6.1.1 + version: 6.1.1(codemirror@6.0.2)(vue@3.5.33(typescript@6.0.3)) + vue-echarts: + specifier: ^8.0.1 + version: 8.0.1(echarts@6.0.0)(vue@3.5.33(typescript@6.0.3)) + vue-i18n: + specifier: ^11.3.0 + version: 11.3.0(vue@3.5.33(typescript@6.0.3)) + vue-router: + specifier: ^5.0.4 + version: 5.0.6(@vue/compiler-sfc@3.5.33)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)) + vuedraggable: + specifier: ^4.1.0 + version: 4.1.0(vue@3.5.33(typescript@6.0.3)) + devDependencies: + '@faker-js/faker': + specifier: ^10.4.0 + version: 10.4.0 + '@tailwindcss/vite': + specifier: ^4.2.2 + version: 4.2.4(vite@8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2)) + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 + '@vitejs/plugin-vue': + specifier: ^6.0.4 + version: 6.0.5(vite@8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2))(vue@3.5.33(typescript@6.0.3)) + oxfmt: + specifier: ^0.43.0 + version: 0.43.0 + oxlint: + specifier: ^1.58.0 + version: 1.62.0 + sass: + specifier: ^1.69.7 + version: 1.98.0 + tailwindcss: + specifier: ^4.2.2 + version: 4.2.4 + typescript: + specifier: ^6.0.2 + version: 6.0.3 + vite: + specifier: ^8.0.3 + version: 8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2) + vite-plugin-mock-dev-server: + specifier: ^2.1.1 + version: 2.1.1(rolldown@1.0.0-rc.17)(vite@8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2)) + vue-tsc: + specifier: ^3.2.6 + version: 3.2.7(typescript@6.0.3) + +packages: + + '@ant-design/colors@7.2.1': + resolution: {integrity: sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==} + + '@ant-design/colors@8.0.1': + resolution: {integrity: sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==} + + '@ant-design/fast-color@2.0.6': + resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} + engines: {node: '>=8.x'} + + '@ant-design/fast-color@3.0.1': + resolution: {integrity: sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==} + engines: {node: '>=8.x'} + + '@ant-design/icons-svg@4.4.2': + resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} + + '@antdv-next/cssinjs@1.0.6': + resolution: {integrity: sha512-8NL+AzjFZVHfG9A2l+r4rNWdRfbS5FFFozGU9jVl7WNgd7y+wEYSzl+qvRjJuqd3IryacrDfsTxIgcSQkVlr5Q==} + peerDependencies: + vue: '>=3.2.0' + + '@antdv-next/icons@1.0.6': + resolution: {integrity: sha512-SCPe/otLTmOEVoAdrZ/fn5pr1wlA1Tbzhk908gWPDnjSLEPIcv4n0Feh416RKj1oe8PKbPIC95BH+HaBXybojg==} + peerDependencies: + vue: '>=3.2.0' + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@codemirror/autocomplete@6.20.1': + resolution: {integrity: sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A==} + + '@codemirror/commands@6.10.3': + resolution: {integrity: sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==} + + '@codemirror/lang-angular@0.1.4': + resolution: {integrity: sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==} + + '@codemirror/lang-cpp@6.0.3': + resolution: {integrity: sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==} + + '@codemirror/lang-css@6.3.1': + resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} + + '@codemirror/lang-go@6.0.1': + resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==} + + '@codemirror/lang-html@6.4.11': + resolution: {integrity: sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==} + + '@codemirror/lang-java@6.0.2': + resolution: {integrity: sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==} + + '@codemirror/lang-javascript@6.2.5': + resolution: {integrity: sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==} + + '@codemirror/lang-jinja@6.0.0': + resolution: {integrity: sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==} + + '@codemirror/lang-json@6.0.2': + resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==} + + '@codemirror/lang-less@6.0.2': + resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==} + + '@codemirror/lang-liquid@6.3.2': + resolution: {integrity: sha512-6PDVU3ZnfeYyz1at1E/ttorErZvZFXXt1OPhtfe1EZJ2V2iDFa0CwPqPgG5F7NXN0yONGoBogKmFAafKTqlwIw==} + + '@codemirror/lang-markdown@6.5.0': + resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==} + + '@codemirror/lang-php@6.0.2': + resolution: {integrity: sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==} + + '@codemirror/lang-python@6.2.1': + resolution: {integrity: sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==} + + '@codemirror/lang-rust@6.0.2': + resolution: {integrity: sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==} + + '@codemirror/lang-sass@6.0.2': + resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==} + + '@codemirror/lang-sql@6.10.0': + resolution: {integrity: sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==} + + '@codemirror/lang-vue@0.1.3': + resolution: {integrity: sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==} + + '@codemirror/lang-wast@6.0.2': + resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==} + + '@codemirror/lang-xml@6.1.0': + resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==} + + '@codemirror/lang-yaml@6.1.3': + resolution: {integrity: sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==} + + '@codemirror/language-data@6.5.2': + resolution: {integrity: sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==} + + '@codemirror/language@6.12.3': + resolution: {integrity: sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==} + + '@codemirror/legacy-modes@6.5.2': + resolution: {integrity: sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==} + + '@codemirror/lint@6.9.5': + resolution: {integrity: sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA==} + + '@codemirror/search@6.6.0': + resolution: {integrity: sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==} + + '@codemirror/state@6.6.0': + resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==} + + '@codemirror/theme-one-dark@6.1.3': + resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==} + + '@codemirror/view@6.41.1': + resolution: {integrity: sha512-ToDnWKbBnke+ZLrP6vgTTDScGi5H37YYuZGniQaBzxMVdtCxMrslsmtnOvbPZk4RX9bvkQqnWR/WS/35tJA0qg==} + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@emotion/hash@0.8.0': + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + + '@emotion/unitless@0.7.5': + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + + '@faker-js/faker@10.4.0': + resolution: {integrity: sha512-sDBWI3yLy8EcDzgobvJTWq1MJYzAkQdpjXuPukga9wXonhpMRvd1Izuo2Qgwey2OiEoRIBr35RMU9HJRoOHzpw==} + engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@hapi/bourne@3.0.0': + resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} + + '@iconify-json/ion@1.2.7': + resolution: {integrity: sha512-ZJNG5kLCbTPr68mdP0jx6Q3lB9AMEQKO2+VvIjuJ2llGFICBLD+cvESn/qGDRIqSfk2D3PrFMf/Qg8WKIUV7cg==} + + '@iconify-json/mdi@1.2.3': + resolution: {integrity: sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==} + + '@iconify-json/ri@1.2.10': + resolution: {integrity: sha512-WWMhoncVVM+Xmu9T5fgu2lhYRrKTEWhKk3Com0KiM111EeEsRLiASjpsFKnC/SrB6covhUp95r2mH8tGxhgd5Q==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/vue@5.0.0': + resolution: {integrity: sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg==} + peerDependencies: + vue: '>=3' + + '@intlify/core-base@11.3.0': + resolution: {integrity: sha512-NNX5jIwF4TJBe7RtSKDMOA6JD9mp2mRcBHAwt2X+Q8PvnZub0yj5YYXlFu2AcESdgQpEv/5Yx2uOCV/yh7YkZg==} + engines: {node: '>= 16'} + + '@intlify/devtools-types@11.3.0': + resolution: {integrity: sha512-G9CNL4WpANWVdUjubOIIS7/D2j/0j+1KJmhBJxHilWNKr9mmt3IjFV3Hq4JoBP23uOoC5ynxz/FHZ42M+YxfGw==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@11.3.0': + resolution: {integrity: sha512-RAJp3TMsqohg/Wa7bVF3cChRhecSYBLrTCQSj7j0UtWVFLP+6iEJoE2zb7GU5fp+fmG5kCbUdzhmlAUCWXiUJw==} + engines: {node: '>= 16'} + + '@intlify/shared@11.3.0': + resolution: {integrity: sha512-LC6P/uay7rXL5zZ5+5iRJfLs/iUN8apu9tm8YqQVmW3Uq3X4A0dOFUIDuAmB7gAC29wTHOS3EiN/IosNSz0eNQ==} + engines: {node: '>= 16'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@lezer/common@1.5.1': + resolution: {integrity: sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==} + + '@lezer/cpp@1.1.5': + resolution: {integrity: sha512-DIhSXmYtJKLehrjzDFN+2cPt547ySQ41nA8yqcDf/GxMc+YM736xqltFkvADL2M0VebU5I+3+4ks2Vv+Kyq3Aw==} + + '@lezer/css@1.3.1': + resolution: {integrity: sha512-PYAKeUVBo3HFThruRyp/iK91SwiZJnzXh8QzkQlwijB5y+N5iB28+iLk78o2zmKqqV0uolNhCwFqB8LA7b0Svg==} + + '@lezer/go@1.0.1': + resolution: {integrity: sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==} + + '@lezer/highlight@1.2.3': + resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==} + + '@lezer/html@1.3.13': + resolution: {integrity: sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==} + + '@lezer/java@1.1.3': + resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==} + + '@lezer/javascript@1.5.4': + resolution: {integrity: sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==} + + '@lezer/json@1.0.3': + resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} + + '@lezer/lr@1.4.8': + resolution: {integrity: sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==} + + '@lezer/markdown@1.6.3': + resolution: {integrity: sha512-jpGm5Ps+XErS+xA4urw7ogEGkeZOahVQF21Z6oECF0sj+2liwZopd2+I8uH5I/vZsRuuze3OxBREIANLf6KKUw==} + + '@lezer/php@1.0.5': + resolution: {integrity: sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==} + + '@lezer/python@1.1.18': + resolution: {integrity: sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==} + + '@lezer/rust@1.0.2': + resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==} + + '@lezer/sass@1.1.0': + resolution: {integrity: sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==} + + '@lezer/xml@1.0.6': + resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==} + + '@lezer/yaml@1.0.4': + resolution: {integrity: sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==} + + '@marijn/find-cluster-break@1.0.2': + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + + '@milkdown/components@7.20.0': + resolution: {integrity: sha512-Qn91/oZugGjf17ARE51nbEsH4YklZQaomRSsfxOAtIcwGEJe5osq+zhhKGtgAYFfUb6rU3W86Pe4XDlXN6vFjg==} + peerDependencies: + '@codemirror/language': ^6 + '@codemirror/state': ^6 + '@codemirror/view': ^6 + + '@milkdown/core@7.20.0': + resolution: {integrity: sha512-X9LaUcIR4Y2oiY2J5tslavlPVOwIB3X8/9z1bOeBjlIPtr+urbkY7YEX86EeLV9LyRQ3+t+jXaLMCIjW1wsV6w==} + + '@milkdown/crepe@7.20.0': + resolution: {integrity: sha512-KT+oFF6Q7mI41z01c9v/wUUCyQ2f908TgOsa6mwi25yuxnxQxISZFCjRvlh0sc9p9D3CrMeuJWGCN6DialQdig==} + + '@milkdown/ctx@7.20.0': + resolution: {integrity: sha512-LUK4xdsUngY2xCCvPTyHPifjAknJ5rE6VBjgsP+LySIUKeFUrhqzo/zz2vaOODKzm3DBMIhpZAoW3MAqxoMGIQ==} + + '@milkdown/exception@7.20.0': + resolution: {integrity: sha512-u8EL7rbqgrWrPpkDhrxUYXauw2DO52JUQmuokrUZvqezmflo7pgIDCr+Rk6AQslzB4Xw+n9eYik5rXX3RXC7Qg==} + + '@milkdown/kit@7.20.0': + resolution: {integrity: sha512-X74KMa0tcDAAMOE9aFtBRN+RCdD/HMXor5YN18e7d0pe4a65MGFklUGlcg1U6zEfeMMYeC3msNvMKLMwk3O5RA==} + + '@milkdown/plugin-block@7.20.0': + resolution: {integrity: sha512-jIXfzJ8Zje+6+9ZwQuVmNeYE8KfzqL9YJ/YdMvWQIEiKhy2x9pZMAkkufgmUlq1aouxOV+gk5fX+ovxzEzfSrA==} + + '@milkdown/plugin-clipboard@7.20.0': + resolution: {integrity: sha512-PyokNvwgWcO6/I/0LxDRnATpnxvs5upFRlp6eO8PhjwBFZftCIU6D15Wg4JAxwW7Y0NyTWfViWjc9TwiBd6KOQ==} + + '@milkdown/plugin-cursor@7.20.0': + resolution: {integrity: sha512-goCPwUARBzGV6Hvnr3P57Bj5TnyFjYIfDFLvgWTIlsm/dR2Wr4Syy4HDOtaKO9YL/VtZ8gtiZVgeo0vhc4CzMA==} + + '@milkdown/plugin-history@7.20.0': + resolution: {integrity: sha512-lqOYQBrxKj4px/i0Cav3zRkCArwnkv8o7fGMh3NtnUXMLSE7/xojK5GFPS4EaS/UKK7/+i1oV2+HRA6+6Ezy7w==} + + '@milkdown/plugin-indent@7.20.0': + resolution: {integrity: sha512-KfdIztQMuHv4Rx1JmSQe2vooN4+Zm7MhjQkNolGyiI7BPZbu855hVIC/s96x3Dk04tkbb+M/i9MJhxCazxfd6Q==} + + '@milkdown/plugin-listener@7.20.0': + resolution: {integrity: sha512-Sj+B63JfM3NVVS3uGXTPkoz8xx8MQYrR28pI9AaqX5q60tvCvOJw9E1ODvSsBEjeqnN4kablDthIugLlBhOlwQ==} + + '@milkdown/plugin-prism@7.20.0': + resolution: {integrity: sha512-Iy8rh/KOzTmJIWpPhjzeF2NEkhldLZ0Edu0/zU3UBsom939ZcUdcsLujwpad7P6KlueBHw8QgSNe0gOEQ56yTQ==} + + '@milkdown/plugin-slash@7.20.0': + resolution: {integrity: sha512-Qm3/ZxkGYd5XN+J/X91lGGu7SBzuQBOTOLjuJdg4qDBZmdEHlGojB+5BhCSAMB3WGyCpQQGbSqKOelUrXtj68w==} + + '@milkdown/plugin-tooltip@7.20.0': + resolution: {integrity: sha512-BVaXorpmA6ZAS3+xv0rgrtjV1h2K39G5Z9Wun4RxT1YXJTTbzIuFQ3hwBAGLjLMwTsosp7YhRLaMJJAC0jEY5Q==} + + '@milkdown/plugin-trailing@7.20.0': + resolution: {integrity: sha512-AxDeMSAZfj0Er7RYLvLRf6FKdQtLVmotxML6Se6zgqIa++bFeIXCU22/FC+9r/6d1eUtraTva9ez5K2qPy8qig==} + + '@milkdown/plugin-upload@7.20.0': + resolution: {integrity: sha512-g3UQrD2zfpm86r3BcBDfOdEAyQHhay1nf5wUQgNf4zn6IgRttfEF8tosQsL1B/WBnZB05hH5scLWo4DR2bFhUw==} + + '@milkdown/preset-commonmark@7.20.0': + resolution: {integrity: sha512-+mPcONXfdjaXdx8JMxDIOT3PWHfy5vewK8iY8j8bUiYD8Iw7YfyWTUh9JHOf4vmOpiKGCJd7+iz7e93u95bQRw==} + + '@milkdown/preset-gfm@7.20.0': + resolution: {integrity: sha512-ulErTWDqrGYYqto4kQO9dPTMRp+q44pdRTPW4MTeiSO7eJ6JIBUKSqtCm1zf7MX6nZPaPhuscmg5CU2moXOwxQ==} + + '@milkdown/prose@7.20.0': + resolution: {integrity: sha512-Qe6jmKcXsjOfpk8duDFdkLCEo5044L8HSyKVn7ewAe7XJJPUM6bPQaP130UAznq75/+TiKxFCzurcrBO3LzNRg==} + + '@milkdown/theme-nord@7.20.0': + resolution: {integrity: sha512-yfT+BQvURTmi+Cjt9rRqFjORrQISbJItKzQD+486hc8hfBcbHnbEjhNAkvoi6IAOWsK+Cj67BuCFtKbYeovrKA==} + + '@milkdown/transformer@7.20.0': + resolution: {integrity: sha512-h7KGFr1o5AYwc+hEfnA3Dldo4jRrYOB/7KExaqelcjUz++KYI/9LXMOsV7CpgjtLI3Xtf2IIRTZND1+p2nsOaw==} + + '@milkdown/utils@7.20.0': + resolution: {integrity: sha512-ciEhtLKhIW/Kaz/NRE5DUXVoMCdenn7S4mClrO7sZ/nXtmObnk3okJzSDnamQoDOcLOIbpOu1V3E1Btkvc5x9w==} + + '@milkdown/vue@7.20.0': + resolution: {integrity: sha512-hQ7D/WIY5+ZXWgonaebXVSAK2QDOTVLIb9sLUfOXwzIzjTh+zDNy3v9+OWETKWvIS+myP/u5GIYdHCbLlHpELA==} + peerDependencies: + vue: ^3.0.0 + + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@ocavue/utils@1.5.0': + resolution: {integrity: sha512-zYOKnvUm8IQ86tNCrpUVBT0lEvoKvyf+9pPS7M4VDB8O1o+msaPMsb/xZx/w5hpcuN1dfehJrkY41ZcdGZpyqg==} + + '@oxc-project/types@0.127.0': + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + + '@oxfmt/binding-android-arm-eabi@0.43.0': + resolution: {integrity: sha512-CgU2s+/9hHZgo0IxVxrbMPrMj+tJ6VM3mD7Mr/4oiz4FNTISLoCvRmB5nk4wAAle045RtRjd86m673jwPyb1OQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.43.0': + resolution: {integrity: sha512-T9OfRwjA/EdYxAqbvR7TtqLv5nIrwPXuCtTwOHtS7aR9uXyn74ZYgzgTo6/ZwvTq9DY4W+DsV09hB2EXgn9EbA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.43.0': + resolution: {integrity: sha512-o3i49ZUSJWANzXMAAVY1wnqb65hn4JVzwlRQ5qfcwhRzIA8lGVaud31Q3by5ALHPrksp5QEaKCQF9aAS3TXpZA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.43.0': + resolution: {integrity: sha512-vWECzzCFkb0kK6jaHjbtC5sC3adiNWtqawFCxhpvsWlzVeKmv5bNvkB4nux+o4JKWTpHCM57NDK/MeXt44txmA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.43.0': + resolution: {integrity: sha512-rgz8JpkKiI/umOf7fl9gwKyQasC8bs5SYHy6g7e4SunfLBY3+8ATcD5caIg8KLGEtKFm5ujKaH8EfjcmnhzTLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.43.0': + resolution: {integrity: sha512-nWYnF3vIFzT4OM1qL/HSf1Yuj96aBuKWSaObXHSWliwAk2rcj7AWd6Lf7jowEBQMo4wCZVnueIGw/7C4u0KTBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.43.0': + resolution: {integrity: sha512-sFg+NWJbLfupYTF4WELHAPSnLPOn1jiDZ33Z1jfDnTaA+cC3iB35x0FMMZTFdFOz3icRIArncwCcemJFGXu6TQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.43.0': + resolution: {integrity: sha512-MelWqv68tX6wZEILDrTc9yewiGXe7im62+5x0bNXlCYFOZdA+VnYiJfAihbROsZ5fm90p9C3haFrqjj43XnlAA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-arm64-musl@0.43.0': + resolution: {integrity: sha512-ROaWfYh+6BSJ1Arwy5ujijTlwnZetxDxzBpDc1oBR4d7rfrPBqzeyjd5WOudowzQUgyavl2wEpzn1hw3jWcqLA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.43.0': + resolution: {integrity: sha512-PJRs/uNxmFipJJ8+SyKHh7Y7VZIKQicqrrBzvfyM5CtKi8D7yZKTwUOZV3ffxmiC2e7l1SDJpkBEOyue5NAFsg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.43.0': + resolution: {integrity: sha512-j6biGAgzIhj+EtHXlbNumvwG7XqOIdiU4KgIWRXAEj/iUbHKukKW8eXa4MIwpQwW1YkxovduKtzEAPnjlnAhVQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.43.0': + resolution: {integrity: sha512-RYWxAcslKxvy7yri24Xm9cmD0RiANaiEPs007EFG6l9h1ChM69Q5SOzACaCoz4Z9dEplnhhneeBaTWMEdpgIbA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.43.0': + resolution: {integrity: sha512-DT6Q8zfQQy3jxpezAsBACEHNUUixKSYTwdXeXojNHe4DQOoxjPdjr3Szu6BRNjxLykZM/xMNmp9ElOIyDppwtw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.43.0': + resolution: {integrity: sha512-R8Yk7iYcuZORXmCfFZClqbDxRZgZ9/HEidUuBNdoX8Ptx07cMePnMVJ/woB84lFIDjh2ROHVaOP40Ds3rBXFqg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.43.0': + resolution: {integrity: sha512-F2YYqyvnQNvi320RWZNAvsaWEHwmW3k4OwNJ1hZxRKXupY63expbBaNp6jAgvYs7y/g546vuQnGHQuCBhslhLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.43.0': + resolution: {integrity: sha512-OE6TdietLXV3F6c7pNIhx/9YC1/2YFwjU9DPc/fbjxIX19hNIaP1rS0cFjCGJlGX+cVJwIKWe8Mos+LdQ1yAJw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.43.0': + resolution: {integrity: sha512-0nWK6a7pGkbdoypfVicmV9k/N1FwjPZENoqhlTU+5HhZnAhpIO3za30nEE33u6l6tuy9OVfpdXUqxUgZ+4lbZw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.43.0': + resolution: {integrity: sha512-9aokTR4Ft+tRdvgN/pKzSkVy2ksc4/dCpDm9L/xFrbIw0yhLtASLbvoG/5WOTUh/BRPPnfGTsWznEqv0dlOmhA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.43.0': + resolution: {integrity: sha512-4bPgdQux2ZLWn3bf2TTXXMHcJB4lenmuxrLqygPmvCJ104Yqzj1UctxSRzR31TiJ4MLaG22RK8dUsVpJtrCz5g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.62.0': + resolution: {integrity: sha512-pKsthNECyvJh8lPTICz6VcwVy2jOqdhhsp1rlxCkhgZR47aKvXPmaRWQDv+zlXpRae4qm1MaaTnutkaOk5aofg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.62.0': + resolution: {integrity: sha512-b1AUNViByvgmR2xJDubvLIr+dSuu3uraG7bsAoKo+xrpspPvu6RIn6Fhr2JUhobfep3jwUTy18Huco6GkwdvGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.62.0': + resolution: {integrity: sha512-iG+Tvf70UJ6otfwFYIHk36Sjq9cpPP5YLxkoggANNRtzgi3Tj3g8q6Ybqi6AtkU3+yg9QwF7bDCkCS6bbL4PCg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.62.0': + resolution: {integrity: sha512-oOWI6YPPr5AJUx+yIDlxmuUbQjS5gZX3OH3QisawYvsZgLiQVvZtR0rPBcJTxLWqt2ClrWg0DlSrlUiG5SQNHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.62.0': + resolution: {integrity: sha512-dLP33T7VLCmLVv4cvjkVX+rmkcwNk2UfxmsZPNur/7BQHoQR60zJ7XLiRvNUawlzn0u8ngCa3itjEG73MAMa/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.62.0': + resolution: {integrity: sha512-fl//LWNks6qo9chNY60UDYyIwtp7a5cEx4Y/rHPjaarhuwqx6jtbzEpD5V5AqmdL4a6Y5D8zeXg5HF2Cr0QmSQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.62.0': + resolution: {integrity: sha512-i5vkAuxvueTODV3J2dL61/TXewDHhMFKvtD156cIsk7GsdfiAu7zW7kY0NJXhKeFHeiMZIh7eFNjkPYH6J47HQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.62.0': + resolution: {integrity: sha512-QwN19LLuIGuOjEflSeJkZmOTfBdBMlTmW8xbMf8TZhjd//cxVNYQPq75q7oKZBJc6hRx3gY7sX0Egc8cEIFZYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.62.0': + resolution: {integrity: sha512-8eCy3FCDuWUM5hWujAv6heMvfZPbcCOU3SdQUAkixZLu5bSzOkNfirJiLGoQFO943xceOKkiQRMQNzH++jM3WA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.62.0': + resolution: {integrity: sha512-NjQ7K7tpTPDe9J+yq8p/s/J0E7lRCkK2uDBDqvT4XIT6f4Z0tlnr59OBg/WcrmVHER1AbrcfyxhGTXgcG8ytWg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.62.0': + resolution: {integrity: sha512-oKZed9gmSwze29dEt3/Wnsv6l/Ygw/FUst+8Kfpv2SGeS/glEoTGZAMQw37SVyzFV76UTHJN2snGgxK2t2+8ow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.62.0': + resolution: {integrity: sha512-gBjBxQ+9lGpAYq+ELqw0w8QXsBnkZclFc7GRX2r0LnEVn3ZTEqeIKpKcGjucmp76Q53bvJD0i4qBWBhcfhSfGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.62.0': + resolution: {integrity: sha512-Ew2Kxs9EQ9/mbAIJ2hvocMC0wsOu6YKzStI2eFBDt+Td5O8seVC/oxgRIHqCcl5sf5ratA1nozQBAuv7tphkHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.62.0': + resolution: {integrity: sha512-5z25jcAA0gfKyVwz71A0VXgaPlocPoTAxhlv/hgoK6tlCrfoNuw7haWbDHvGMfjXhdic4EqVXGRv5XsTqFnbRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.62.0': + resolution: {integrity: sha512-IWpHmMB6ZDllPvqWDkG6AmXrN7JF5e/c4g/0PuURsmlK+vHoYZPB70rr4u1bn3I4LsKCSpqqfveyx6UCOC8wdg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.62.0': + resolution: {integrity: sha512-fjlSxxrD5pA594vkyikCS9MnPRjQawW6/BLgyTYkO+73wwPlYjkcZ7LSd974l0Q2zkHQmu4DPvJFLYA7o8xrxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.62.0': + resolution: {integrity: sha512-EiFXr8loNS0Ul3Gu80+9nr1T8jRmnKocqmHHg16tj5ZqTgUXyb97l2rrspVHdDluyFn9JfR4PoJFdNzw4paHww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.62.0': + resolution: {integrity: sha512-IgOFvL73li1bFgab+hThXYA0N2Xms2kV2MvZN95cebV+fmrZ9AVui1JSxfeeqRLo3CpPxKZlzhyq4G0cnaAvIw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.62.0': + resolution: {integrity: sha512-6hMpyDWQ2zGA1OXFKBrdYMUveUCO8UJhkO6JdwZPd78xIdHZNhjx+pib+4fC2Cljuhjyl0QwA2F3df/bs4Bp6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@paralleldrive/cuid2@2.3.1': + resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} + + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + + '@pengzhanbo/utils@3.3.1': + resolution: {integrity: sha512-rVmmTdeQs+gdk5XboXG7gv4LSLnCceZ9l9Z1v/P+zScOpwPYn6mSVukPtRC22234rXC/13AZV2gZ3ZDvNmP9XA==} + + '@rolldown/binding-android-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.17': + resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': + resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': + resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': + resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.17': + resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} + + '@rolldown/pluginutils@1.0.0-rc.2': + resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} + + '@tailwindcss/node@4.2.4': + resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==} + + '@tailwindcss/oxide-android-arm64@4.2.4': + resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.2.4': + resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.2.4': + resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.2.4': + resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': + resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': + resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.2.4': + resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.2.4': + resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.2.4': + resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.2.4': + resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': + resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.2.4': + resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.2.4': + resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.2.4': + resolution: {integrity: sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + + '@tiptap/core@3.22.5': + resolution: {integrity: sha512-L1lhWz6ujGny8LduTJ7MBWYhzigwOvfUJUrJ7IzOJSuy3+OAzisdGDD1GV7LEO/hU0Hr2Mkm1wajRIHExvS9HQ==} + peerDependencies: + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-blockquote@3.22.5': + resolution: {integrity: sha512-ajyP5W8fG5Hrru47T/eF3xMKOpNvWofgNJqBTeNuGl02sYxsy9a4EunyFxudsaZP9WW3VOD4SaIWr5+MqpbnOQ==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-bold@3.22.5': + resolution: {integrity: sha512-l/uDtpJISiFFyfctvnODNWBN/XPZI1jVZRacTRDDnSn8+x6KQ7G2qgFYueU7KvVJGDFVT39Iio56mcFRG/Pozg==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-bubble-menu@3.22.5': + resolution: {integrity: sha512-yrNlFQQJY5MmhBpmD8tnmaSmyUQrEvgyPKa3bzVeWEhDSG1CW4A0ZSMx3hrA9yFO0HWfw3IJmvSCycEZQBalpQ==} + peerDependencies: + '@tiptap/core': 3.22.5 + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-bullet-list@3.22.5': + resolution: {integrity: sha512-cf54fG9AybU8NgPMv1TOcoqAkELeRc/VpnSCt/rIJZphWQx9nsFmrtkrlCatrIcCaGtNZYwlHlMnC5LVVMu0uA==} + peerDependencies: + '@tiptap/extension-list': 3.22.5 + + '@tiptap/extension-code-block@3.22.5': + resolution: {integrity: sha512-d123kCfLdJTi4fue1m0+TNFztDkmIRSZGZmGu6H9KqwG5Q7IzjT9o8lzRsz+pXxYqHvqgYmXoEpM6srbzXx/Ag==} + peerDependencies: + '@tiptap/core': 3.22.5 + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-code@3.22.5': + resolution: {integrity: sha512-mwDNOJC9rYbDu/JcqrN4dbUQRklJU8Fuk2raxD/IvFw9qUIcPCmxQ2XT9UTKmZz/Ju7Kdy72fss6XpgWv6gLAQ==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-document@3.22.5': + resolution: {integrity: sha512-8NJERd+pCtvSuEP4C4WMGYmRRCV12ePZL7bC+QUdFlbdXg+kNZS0zZ7hh879tYA0Kidbi8rWWD1Tx+H2ezkmMw==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-dropcursor@3.22.5': + resolution: {integrity: sha512-Mp40DaFrY3sEUVtFqmxrR0BmU4G3k8GCYYNGqNa9OqWv7BrcFDC03V2n3okESDKt4MKkzhQQmypq+ouLy8dLfA==} + peerDependencies: + '@tiptap/extensions': 3.22.5 + + '@tiptap/extension-floating-menu@3.22.5': + resolution: {integrity: sha512-dhem4sTPhyQgQ+pFp2Oud4k4FSQz9PVMgeQAC9288SmGwxBkJNveDAw6sKTMrumqDvwkJrtslXIupq9TZYQnzg==} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': 3.22.5 + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-gapcursor@3.22.5': + resolution: {integrity: sha512-4WkMu7qqjbsm8hCQS+8X+la1wjriN0SKoRdvpfKH33qM50MB34tYJuGLAO+y7TTh4MMMco3AZCKPBL5JVMqNIg==} + peerDependencies: + '@tiptap/extensions': 3.22.5 + + '@tiptap/extension-hard-break@3.22.5': + resolution: {integrity: sha512-n0R2mUVYZU2AVbJhg/WcY9+zx690wVwvsItHJf0DrYbf1tCYHx+PRHUt/AoXk6u8BSmnkb8/FDziS8m3mjfpSg==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-heading@3.22.5': + resolution: {integrity: sha512-hjyEG4947PAhMBfP1G6B0QAh6+y9mp2C5BQmNjprA05/lQzDAT7KFZzNh8ZVp3ol6aICKq/N1gFOW9Dc/9FUOw==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-horizontal-rule@3.22.5': + resolution: {integrity: sha512-vUV0/ugIbXOc8SJib0h8UMhgcqZXWu/dkEhlswZN4VVven1o5enkfxEiDw+OyIJHi5rUkrdhsQ/KTxG/Xb7X8A==} + peerDependencies: + '@tiptap/core': 3.22.5 + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-image@3.22.5': + resolution: {integrity: sha512-ezMzA6w6UsPesQp6fxTQojI/IkGJLmkwR/VGTimva7sudP3HdSW8k3SGBkjfvp0L2xqUrC/l4nWOchu01A/xtQ==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-italic@3.22.5': + resolution: {integrity: sha512-4T8baSiLkeIymTgEwirxDFt5YgYofkP3m1+MGYdGy2HKcOK+1vpvlPhEO1X5qtZngtJW5S4+njKjinRg52A4PA==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-link@3.22.5': + resolution: {integrity: sha512-d671MvF3GPKoS2OVxjIlQ7hIE7MS3hREdR+d4cvnnoiLLD+ZJ6KgDnxmWqF0a1s4qxLWK2KxKRSOIfYGE31QWQ==} + peerDependencies: + '@tiptap/core': 3.22.5 + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-list-item@3.22.5': + resolution: {integrity: sha512-W7uTmyKLhlsvuTPLv+8WwnsY+mlikBFIoLSvVcBaFt4MwpsZ+DeB6KQg02Y7tbtaAnG7rXu9Fvw2QORh2P728A==} + peerDependencies: + '@tiptap/extension-list': 3.22.5 + + '@tiptap/extension-list-keymap@3.22.5': + resolution: {integrity: sha512-cGUnxJ0y515e1bVHNjUmbx7oWHoEon59w6BA5N2KwV9iW2mZZchlTX4yxJSOX+ixeVRChsa7YwC3Z1jUZ6AMEg==} + peerDependencies: + '@tiptap/extension-list': 3.22.5 + + '@tiptap/extension-list@3.22.5': + resolution: {integrity: sha512-cVO3ZHCgxAWZ4zrFSs81FO2nyCk1wb2EHkpLpW98FzbJLkN9rDkazhW99P3HRWy/CvUldOT+8ecI1YrQtBojMg==} + peerDependencies: + '@tiptap/core': 3.22.5 + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-ordered-list@3.22.5': + resolution: {integrity: sha512-OXdh4k4CNrukwiSdWdEQ49uvgnqvR0Z9aNSP4HI5/kZQ/Te1NtRtYCpUrzWyO/7CtjcCisXHti0o9C/TV8YMbQ==} + peerDependencies: + '@tiptap/extension-list': 3.22.5 + + '@tiptap/extension-paragraph@3.22.5': + resolution: {integrity: sha512-52KCto4+XKpnBWpIufspWLyq4UWxAWC72ANPdGuIhbi72NRTabiTbTVN40uwGSPkyakeESG0/vKdWJCVvB4f0g==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-placeholder@3.22.5': + resolution: {integrity: sha512-MZAohQ3FCS763BkhGXgaWRya6WruZjwRwEAkXP8vkxbERzl2OJRjniS4uXCWzAlRb3ttE103SnY7LMdM8FvsXw==} + peerDependencies: + '@tiptap/extensions': 3.22.5 + + '@tiptap/extension-strike@3.22.5': + resolution: {integrity: sha512-42WrrFK5gOom/0znH85x12Mw5IQ/6O6DWdyUWoRIrNA/qJpuHtU8oVU+bIgU2tuomMGHruRjIzgBQv5sBjEtww==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-text@3.22.5': + resolution: {integrity: sha512-bzpDOdAEo1JeoVZDIyV0oY0jGXkEG+AzF70SzHoRSjOvFDtKWunyXf9eO1OnOr2/fmMcckT2qwUBNBMQplWBzw==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extension-underline@3.22.5': + resolution: {integrity: sha512-9ut09rJD0iEbS6sk7yd2j6IwuFDLTNmDEGTDLodvqAfi+bq7ddsTDv0YviXoZaA9sdHAdTEVr2ITy2m6WK5jpA==} + peerDependencies: + '@tiptap/core': 3.22.5 + + '@tiptap/extensions@3.22.5': + resolution: {integrity: sha512-Ifg4MzKCj3uRqe3ieTwYnomu2y4p7EXr2avVSKZYfh12i2dyWe2Gkn1KuZDREANVE+gHqFlQjJRYzhJFwzSCrg==} + peerDependencies: + '@tiptap/core': 3.22.5 + '@tiptap/pm': 3.22.5 + + '@tiptap/pm@3.22.5': + resolution: {integrity: sha512-Cr9Mv4igxvI2tKMiahw48sZxva3PfDzypErH8IB82N+9qa9n9ygVMt0BOaDg53hLKxEEVeYr2S/wCcJIVFgBTw==} + + '@tiptap/starter-kit@3.22.5': + resolution: {integrity: sha512-LZ/LYbwH6rnDi5DnRyagkuNsYAVyhM+yJvvz+ZuYA0JkPiTXJV86J5PWSKew8M0gVfMHcNVtKjfQCvViFCeIgw==} + + '@tiptap/vue-3@3.22.5': + resolution: {integrity: sha512-xwSXPwDjauIVktMXBMaNaSgFyq3O1sXcX1vWyHyyCFlq4+8ekq4uXbjkD6y6IhZyr/AQoRYnjgosus+apGyGuA==} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': 3.22.5 + '@tiptap/pm': 3.22.5 + vue: ^3.0.0 + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/katex@0.16.8': + resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/prismjs@1.26.6': + resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@uiw/codemirror-theme-dracula@4.25.9': + resolution: {integrity: sha512-0VTnpPCHPc+7LqYsQOX6nvW32XiiT+O6kJjReUbV7Eio3vPHsb+b9P4DKhz4AAvIIYMxmHkMuautHKuWktFXSg==} + + '@uiw/codemirror-theme-github@4.25.9': + resolution: {integrity: sha512-AGpTamNiySKNzq3Jc7QjpwgQRVaHUaBtmOKiUDghYSfEGjsc5uW4NUW70sSU3BnkGv+lCTUnF3175KM24BWZbw==} + + '@uiw/codemirror-theme-material@4.25.9': + resolution: {integrity: sha512-6f2x+gmj2hHagqy6VkpnPbK7SWyP6kKruGgqpyIy09/f9pAUCqkW8mRY5ZEr28tA+YEGQaSY0Z2IBCHl8OKJog==} + + '@uiw/codemirror-theme-monokai@4.25.9': + resolution: {integrity: sha512-qKWRZOGpBCasZJdYU+SsXd92TjncF3QYHpraCPe29bxN22jeIxi2UC4MCuJHwa8hHljHOCSdx1XG/GuUMn7XiQ==} + + '@uiw/codemirror-theme-nord@4.25.9': + resolution: {integrity: sha512-5c568xmMidwICADxACB1zIhKoEgqbdVrdeOUZ2p5pE6NNKGR4ATzk9OSqhvr1ZhZPNOktxqSLLRzihFaZG0bDQ==} + + '@uiw/codemirror-theme-solarized@4.25.9': + resolution: {integrity: sha512-axUgU9+3JKXW83F+te454qcyTmQAm0+2Fxv0yoegiH6bdl7DjFq/lNVGGZtLwN47AQCj2Qwrheeet2t3GbY9VQ==} + + '@uiw/codemirror-theme-tokyo-night@4.25.9': + resolution: {integrity: sha512-NkSqguMpzRjsRBbTIfOrGS35tQkE3K8AAetZHlbRZC7fnI52RreZ11X41cOYrc/Dapt8xqUPlhlvclymGFgy8g==} + + '@uiw/codemirror-themes@4.25.9': + resolution: {integrity: sha512-DAHKb/L9ELwjY4nCf/MP/mIllHOn4GQe7RR4x8AMJuNeh9nGRRoo1uPxrxMmUL/bKqe6kDmDbIZ2AlhlqyIJuw==} + peerDependencies: + '@codemirror/language': '>=6.0.0' + '@codemirror/state': '>=6.0.0' + '@codemirror/view': '>=6.0.0' + + '@v-c/async-validator@1.0.1': + resolution: {integrity: sha512-2WXdbTso13119ZLiwUv1JkmdL0K4ll69id4oE3ft3LQX+YAHOoJtfx080u26lLtypgZS32PguoohgB0BVo39rg==} + + '@v-c/cascader@1.0.3': + resolution: {integrity: sha512-TaXkWxP3N6LW1yezeN+91k7BFYDSsWj1Y1ujWv51I0lJY4l0iwtjKDDmLLMYoqtUjnW1Onz1g1h6PtiDFALcXQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/checkbox@1.0.1': + resolution: {integrity: sha512-+QsE/0VfU6oeglwuHWYxRNTn3+eV08iG0uN/upDmqSGznezInzfUClh+t4acd/OxyJVtuob0WKsg/vPlT6WRWw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/collapse@1.0.0': + resolution: {integrity: sha512-y4NAl3j4mka193ZMDLHdISA8to61qoROG6/kTQ0myM2ZuEsonnEK1QWlqoEw3gveMsa6a4RdyoXLxdGdcJyp0Q==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/color-picker@1.0.6': + resolution: {integrity: sha512-XiTlEMG5p5jkCdKP7nbeo9EJrpdXnoW4uBOA2us8pVgA6m0GxrwMoCg//X+1XsuOaebG/1Swo65mjRuMBM6rZg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/dialog@1.0.3': + resolution: {integrity: sha512-NfeuaHC1PPaRyekoXN6G9AjRL5L9eQiV9tnkRp62GyCfZsHMFgdwlREW6buHifHe7dk4z/ilvGms5tnbw63R4A==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/drawer@1.0.6': + resolution: {integrity: sha512-nW8rCsf7viUsTo+8SAfqcNDO4B0GC4n2VidHV4kJzbERrMvMsHVpDz1LO+UFgLs8Mn9EjpQm40JtF6d/BNkW0g==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/dropdown@1.0.2': + resolution: {integrity: sha512-D6TACf3jUiRWx4xW5h2+wVT9SMYxUasFlAHESYJr4ZMjLTLLM1Q8iBjkjhGF+vA0eYR5zqRTwlaacN0DNDZBPw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/image@1.0.11': + resolution: {integrity: sha512-BkvIkEcP2M25fvNCEMcWX7hk+gFtk6Vg6V08wtoQZmvt/0shl3uS5q+4/NxJFOOjtMzWAkmGreRcqzfsOE/ptw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/input-number@1.0.5': + resolution: {integrity: sha512-YQBpV1KnuYf0o2XrbC+OEyP6lkyqv1XhzDVh3QhHO2bs/Jr3uSD8b3cxdEGU+gjoNJUcoZx7XiIzcYhLlvMctw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/input@1.0.3': + resolution: {integrity: sha512-vQic9OWfREBlNfJeRcejMcOPhp4xnbHVbqeqo/TfCOf73Ym+zjWXRGXiqM/pIqV9v95zuhYen3KzMeJYM4pViA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/mentions@1.0.0': + resolution: {integrity: sha512-trkG1lvfiaIY7UnHn0gx6B01o3rFLEMin3KGp1q4oU6zOCRWde4ejZ+EHSvmXzOz2N+FlRMTE4EMJFi4w0oOlQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/menu@1.0.14': + resolution: {integrity: sha512-AzAbKJ69svJ1F7FLfY6FZ2Qn7fofgvq4DF7gp2fEPOd6CZ70+qM9ZPHDsW0SXukaYcIVH1tcSf+HkiC+7BCwRw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/mini-decimal@1.0.1': + resolution: {integrity: sha512-76wZLdlkI017iDlaZMNOWZyDCv29YVabUJn5urQgIKtW4dnI5AkNXWtmLyhl/mu/OS7ZGisRi5ai/558QhLQxQ==} + + '@v-c/mutate-observer@1.0.1': + resolution: {integrity: sha512-84+9KGORX8LY9u+K0DEGyRwRCJaky0sjRkXxBC7X/jahHJl8NQGQ0Gxve5IVwaxRTfZ9eftlRmHs90JD6Utfqg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/notification@1.0.0': + resolution: {integrity: sha512-aU5g+ZiYxp0KVdKuho067wJRF38Mv7MrQS95dwSJLsbDmVFBpjO3Lo3ptakfPkwn+7uwRytHKIf39t9QVGk+sg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/overflow@1.0.4': + resolution: {integrity: sha512-27vuUWoLUz/WeUzYVubfVZ4YtthKCQ1FskYw2VIQw6ECnuTxG1yjj2UdSIoEunZFdU03VU1wU9DI6Qu0Vcp1tQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/overflow@1.0.5': + resolution: {integrity: sha512-Ae5aSZItOQHYzscs5JcmLPBLLEkpCS6c8IcHv9jABH0lZZGlZiUF4WBkAvSSnU8Q9f14BJ6dEb5XLwbwpyTZEQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/pagination@1.0.0': + resolution: {integrity: sha512-uYIMkvHKMtY+nwHTu5rXxiq6KPf0zGpZbtQTn1nDPng0tOyA1vLQ+R6OfE+1LOwuQqvFTEDnAq4vb90By+eBfw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/picker@1.0.4': + resolution: {integrity: sha512-B98FSgE+Kh6lNwa5msySFL8NNiF3fFkmFuuL14WEdb4f6q47XYH7YvcQa2jySXnbYPKHdykZMFo37f/0BzFaPw==} + peerDependencies: + date-fns: '>= 2.x' + dayjs: '>= 1.x' + luxon: '>= 3.x' + moment: '>= 2.x' + vue: ^3.0.0 + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + + '@v-c/portal@1.0.8': + resolution: {integrity: sha512-93elruWfHKrdtRkpFBNpi47YhQjA75tCuG8C/WvcQ9x/dp+H3i+y7h6t0iyyDjZu1w3d2U5+d43vtslmoQXBYg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/progress@1.0.0': + resolution: {integrity: sha512-kWDTU1uXnPDMmoezwyAECxuSH+WKn92OjSdk/GgDbQgZ0qNy9woOiRe5fOsrcy61agHdJxzf0MvsUy1b6bZVlA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/qrcode@1.0.0': + resolution: {integrity: sha512-OSMrYDhP/NQiUcO6J0X2X8BskHPRqX/E/F9npH3oayZgjCo5Aom+63Ja3J0u6SOmKP1JgLSgjrm5karc0671jw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/rate@1.0.1': + resolution: {integrity: sha512-ZWWY01LeKu9S/JncdvSr2gz2Kwwum3bB/AxzzCsuhCyg+9P4BLwX7S2WZDMiJ92uYEpiYladVTCa9XdSCPaCaQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/resize-observer@1.0.8': + resolution: {integrity: sha512-VH8WBsNfZA5KQ+CXVaQ1PK5B6FIHnuTdqOLrjRWiZTrIYDZi/MyREi9b21YDj55fbFWMRx4yapnO9tiZX1RNxA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/segmented@1.0.2': + resolution: {integrity: sha512-g/aWgURMJkytu05AACN3Pd9QKgka4ZQM8tl/y0AcabANldy2hmPIHek0ZH5dDdn5VmK1PhAfUTqtgDS19sLh5w==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/select@1.0.20': + resolution: {integrity: sha512-gmG5U7r8YgXIjGQZ5qjHM3felSlYAep7pBjJRzA8ALgHhx0CKRk6RTadVDXzWh7LwOFvlgTn7OLUMTU6RACoaQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/slick@1.0.2': + resolution: {integrity: sha512-8BbPxJgYST+tio9jyeFQgJb/3XSFhfWZN8Am7YVYeqsYsvn3g8wu61UZNSjlkp9ArOEe+ujOgX4izfDHeXh4RA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/slider@1.0.10': + resolution: {integrity: sha512-KMIVytBm8K8RQ+aPPraS28GmBptGHESF/gDRbGjOLD7xyivuQDJeEqVaUFY3EcCWsERjh4VP/L96gUbMTF0uag==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/steps@1.0.0': + resolution: {integrity: sha512-DPL0OOb8pDLlTPZB93b8+Saxiz6V5zEpGXKaCnsbXUuOhimkc7089AuEKfpMw+8x1SrVe+gapWf5RRHWXUm2pg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/switch@1.0.0': + resolution: {integrity: sha512-VIem244KJkYfqDgofpgHjK00sGL9rJ/9OtmK4Gbs4hnPsrTtzHDBRltYxR4IT7HQleathZfj6NhcZ1bjdWKYUw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/table@1.0.7': + resolution: {integrity: sha512-vdJE9/gm3KRfDfgWM5O5jKNBwYB/PbS6yQ2TkiMwTmKjOHnaiSIRPJd++X7jCSchi46nU1shNDmqHf3Pw3Y9mg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tabs@1.0.2': + resolution: {integrity: sha512-FA/lG5TaYOVFhB3WjJ2x6O8egREm9FWdfEbnY1Tmg3D1avkxYDhISHlW4ot3NvWb8Ds4MxBe0T9xg206o0LHEw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/textarea@1.0.4': + resolution: {integrity: sha512-VrQrLjKsiFh3bngXDULK+mUI4RmTT0hqDOUChsGmo5dZGgcmzsDbVLFluYCvpV+InUsnn2jGSQEuqMQy1Vga+g==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tooltip@1.0.3': + resolution: {integrity: sha512-72EkTfhb67RPJvMXIW6HUYiZ+Jdrb7tBQmS3wDtFDNU7uIrS5DQLyXJDCu9qWlrPv7cQ/RHA4JfCINw88vchzw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tour@1.0.3': + resolution: {integrity: sha512-y4DVJPP7jvL+MWUMAKQWxLAMXSWJEfZXaKASPn3DKbSQ8drBhsjMXwcep3glAfrCjCKfj/QD3OrUMxqydi4qFw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tree-select@1.0.3': + resolution: {integrity: sha512-N4mK8JXrCU+GFfhLG/zat3TAUt0Ju+P4S3hN6PlmuHPikQ4OWEA91CA8Br83i4zpW9TCH7xP0EfMUvhLtjqbsA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tree@1.0.6': + resolution: {integrity: sha512-NrFtKD4DmUM/4GyBWYQuAJkgDfOhlBUV6Z4slleGj4yxmwU3fRBvoDYVNtrqfP8GmNRY/9IHA8c2FfidvKys8g==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/trigger@1.0.14': + resolution: {integrity: sha512-3flCLvHvW2fJ8Rg/m4kCk7UGtL9GsrPgeSbdQJ1FU5+sZmfT2bcPwQZM824e7VFLmgaYPLiaQOL3l46uEPFWLw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/upload@1.0.0': + resolution: {integrity: sha512-W92PNCD61aM/B5w8oUzHQSDHur1T8484726Ls0IoNMO5nPiF/15eEE3RuuI/t7xXQVP/fA06hNSwzXwGWdDg1w==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/util@1.0.19': + resolution: {integrity: sha512-apJGS4BVzhXbrNR6jxXF18jAiOWIn/UNmGjgSvB5r4ba9Wr/ireKCfJvhuuNsZi+scLaM0W3ghB81PbQ5vwoJg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/virtual-list@1.0.7': + resolution: {integrity: sha512-zoINTbsUh7VNGHEAZnY/TZRWBmL7lhFxr1bwK6KxP+3CJSIG26b2jTQFzfdr/qq4CrmLcmpcW2jlHass7PAMAg==} + peerDependencies: + vue: ^3.0.0 + + '@vitejs/plugin-vue@6.0.5': + resolution: {integrity: sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.28': + resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} + + '@volar/source-map@2.4.28': + resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} + + '@volar/typescript@2.4.28': + resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + + '@vue-macros/common@3.1.2': + resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} + engines: {node: '>=20.19.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + + '@vue/compiler-core@3.5.30': + resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==} + + '@vue/compiler-core@3.5.33': + resolution: {integrity: sha512-3PZLQwFw4Za3TC8t0FvTy3wI16Kt+pmwcgNZca4Pj9iWL2E72a/gZlpBtAJvEdDMdCxdG/qq0C7PN0bsJuv0Rw==} + + '@vue/compiler-dom@3.5.30': + resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==} + + '@vue/compiler-dom@3.5.33': + resolution: {integrity: sha512-PXq0yrfCLzzL07rbXO4awtXY1Z06LG2eu6Adg3RJFa/j3Cii217XxxLXG22N330gw7GmALCY0Z8RgXEviwgpjA==} + + '@vue/compiler-sfc@3.5.30': + resolution: {integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==} + + '@vue/compiler-sfc@3.5.33': + resolution: {integrity: sha512-UTUvRO9cY+rROrx/pvN9P5Z7FgA6QGfokUCfhQE4EnmUj3rVnK+CHI0LsEO1pg+I7//iRYMUfcNcCPe7tg0CoA==} + + '@vue/compiler-ssr@3.5.30': + resolution: {integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==} + + '@vue/compiler-ssr@3.5.33': + resolution: {integrity: sha512-IErjYdnj1qIupG5xxiVIYiiRvDhGWV4zuh/RCrwfYpuL+HWQzeU6lCk/nF9r7olWMnjKxCAkOctT2qFWFkzb1A==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/devtools-api@7.7.9': + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + + '@vue/devtools-api@8.1.0': + resolution: {integrity: sha512-O44X57jjkLKbLEc4OgL/6fEPOOanRJU8kYpCE8qfKlV96RQZcdzrcLI5mxMuVRUeXhHKIHGhCpHacyCk0HyO4w==} + + '@vue/devtools-kit@7.7.9': + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + + '@vue/devtools-kit@8.1.0': + resolution: {integrity: sha512-/NZlS4WtGIB54DA/z10gzk+n/V7zaqSzYZOVlg2CfdnpIKdB61bd7JDIMxf/zrtX41zod8E2/bbEBoW/d7x70Q==} + + '@vue/devtools-shared@7.7.9': + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + + '@vue/devtools-shared@8.1.0': + resolution: {integrity: sha512-h8uCb4Qs8UT8VdTT5yjY6tOJ//qH7EpxToixR0xqejR55t5OdISIg7AJ7eBkhBs8iu1qG5gY3QQNN1DF1EelAA==} + + '@vue/language-core@3.2.7': + resolution: {integrity: sha512-Gn4q/tRxbpVGLEuARQ43p3YELlNAFgRUVCgW9U5Cr+5q4vfD2bWDWpl3ABbJMXUt5xlE1dF8dkigg2aUq7JYYw==} + + '@vue/reactivity@3.5.33': + resolution: {integrity: sha512-p8UfIqyIhb0rYGlSgSBV+lPhF2iUSBcRy7enhTmPqKWadHy9kcOFYF1AejYBP9P+avnd3OBbD49DU4pLWX/94A==} + + '@vue/runtime-core@3.5.33': + resolution: {integrity: sha512-UpFF45RI9//a7rvq7RdOQblb4tup7hHG9QsmIrxkFQLzQ7R8/iNQ5LE15NhLZ1/WcHMU2b47u6P33CPUelHyIQ==} + + '@vue/runtime-dom@3.5.33': + resolution: {integrity: sha512-IOxMsAOwquhfITgmOgaPYl7/j8gKUxUFoflRc+u4LxyD3+783xne8vNta1PONVCvCV9A0w7hkyEepINDqfO0tw==} + + '@vue/server-renderer@3.5.33': + resolution: {integrity: sha512-0xylq/8/h44lVG0pZFknv1XIdEgymq2E9n59uTWJBG+dIgiT0TMCSsxrN7nO16Z0MU0MPjFcguBbZV8Itk52Hw==} + peerDependencies: + vue: 3.5.33 + + '@vue/shared@3.5.30': + resolution: {integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==} + + '@vue/shared@3.5.33': + resolution: {integrity: sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ==} + + '@vueuse/core@14.2.1': + resolution: {integrity: sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/metadata@14.2.1': + resolution: {integrity: sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==} + + '@vueuse/shared@14.2.1': + resolution: {integrity: sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==} + peerDependencies: + vue: ^3.5.0 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + alien-signals@3.1.2: + resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} + + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + engines: {node: '>=14'} + + antdv-next@1.2.2: + resolution: {integrity: sha512-sJETcuCpWnE2Nf4oSYZf424d1Y7ngnl2c+mMraHE4R6qZZHxXg2VuSF5MzhSBa16obz5blhqKjXMiyAWCZWIHg==} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + ast-kit@2.2.0: + resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} + engines: {node: '>=20.19.0'} + + ast-walker-scope@0.8.3: + resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==} + engines: {node: '>=20.19.0'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.15.2: + resolution: {integrity: sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + co-body@6.2.0: + resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==} + engines: {node: '>=8.0.0'} + + codemirror@6.0.2: + resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + dompurify@3.3.3: + resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + echarts@6.0.0: + resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} + + enhanced-resolve@5.20.0: + resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} + engines: {node: '>=10.13.0'} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-toolkit@1.45.1: + resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + formidable@3.5.4: + resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} + engines: {node: '>=14.0.0'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + http-status@2.1.0: + resolution: {integrity: sha512-O5kPr7AW7wYd/BBiOezTwnVAnmSNFY+J7hlZD2X5IOxVBetjcHAiTXhzj0gMrnojQlwy+UT1/Y3H3vJ3UlmvLA==} + engines: {node: '>= 0.4.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} + + inflation@2.1.0: + resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} + engines: {node: '>= 0.8.0'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + katex@0.16.38: + resolution: {integrity: sha512-cjHooZUmIAUmDsHBN+1n8LaZdpmbj03LtYeYPyuYB7OuloiaeaV6N4LcfjcnHVzGWjVQmKrxxTrpDcmSzEZQwQ==} + hasBin: true + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + linkifyjs@4.3.2: + resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==} + + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + magic-string-ast@1.0.3: + resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==} + engines: {node: '>=20.19.0'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.8.1: + resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@5.1.6: + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} + engines: {node: ^18 || >=20} + hasBin: true + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + + oxfmt@0.43.0: + resolution: {integrity: sha512-KTYNG5ISfHSdmeZ25Xzb3qgz9EmQvkaGAxgBY/p38+ZiAet3uZeu7FnMwcSQJg152Qwl0wnYAxDc+Z/H6cvrwA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + oxlint@1.62.0: + resolution: {integrity: sha512-1uFkg6HakjsGIpW9wNdeW4/2LOHW9MEkoWjZUTUfQtIHyLIZPYt00w3Sg+H3lH+206FgBPHBbW5dVE5l2ExECQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.18.0' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pinia@3.0.4: + resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==} + peerDependencies: + typescript: '>=4.5.0' + vue: ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pinyin-pro@3.28.0: + resolution: {integrity: sha512-mMRty6RisoyYNphJrTo3pnvp3w8OMZBrXm9YSWkxhAfxKj1KZk2y8T2PDIZlDDRsvZ0No+Hz6FI4sZpA6Ey25g==} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + postcss@8.5.12: + resolution: {integrity: sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + prosemirror-changeset@2.4.0: + resolution: {integrity: sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng==} + + prosemirror-commands@1.7.1: + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} + + prosemirror-drop-indicator@0.1.3: + resolution: {integrity: sha512-fJV6G2tHIVXZLUuc60fS9ly1/GuGOlAZUm67S1El+kGFUYh27Hyv6hcGx3rrJ+Q/JZL5jnyAibIZYYWpPqE45g==} + + prosemirror-dropcursor@1.8.2: + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} + + prosemirror-gapcursor@1.4.1: + resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==} + + prosemirror-history@1.5.0: + resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} + + prosemirror-inputrules@1.5.1: + resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} + + prosemirror-keymap@1.2.3: + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} + + prosemirror-model@1.25.4: + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} + + prosemirror-safari-ime-span@1.0.2: + resolution: {integrity: sha512-QJqD8s1zE/CuK56kDsUhndh5hiHh/gFnAuPOA9ytva2s85/ZEt2tNWeALTJN48DtWghSKOmiBsvVn2OlnJ5H2w==} + + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} + + prosemirror-state@1.4.4: + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} + + prosemirror-tables@1.8.5: + resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==} + + prosemirror-transform@1.11.0: + resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==} + + prosemirror-view@1.41.6: + resolution: {integrity: sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg==} + + prosemirror-virtual-cursor@0.4.2: + resolution: {integrity: sha512-pUMKnIuOhhnMcgIJUjhIQTVJruBEGxfMBVQSrK0g2qhGPDm1i12KdsVaFw15dYk+29tZcxjMeR7P5VDKwmbwJg==} + peerDependencies: + prosemirror-model: ^1.0.0 + prosemirror-state: ^1.0.0 + prosemirror-view: ^1.0.0 + peerDependenciesMeta: + prosemirror-model: + optional: true + prosemirror-state: + optional: true + prosemirror-view: + optional: true + + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + + qs@6.15.0: + resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} + engines: {node: '>=0.6'} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} + engines: {node: '>= 0.8'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + refractor@5.0.0: + resolution: {integrity: sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-inline-links@7.0.0: + resolution: {integrity: sha512-4uj1pPM+F495ySZhTIB6ay2oSkTsKgmYaKk/q5HIdhX2fuyLEegpjWa0VdJRJ01sgOqAFo7MBKdDUejIYBMVMQ==} + + remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rolldown@1.0.0-rc.17: + resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass@1.98.0: + resolution: {integrity: sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A==} + engines: {node: '>=14.0.0'} + hasBin: true + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + sortablejs@1.14.0: + resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + style-mod@4.1.3: + resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} + + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + + tailwindcss@4.2.4: + resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} + engines: {node: '>=12.22'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unplugin-utils@0.3.1: + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + engines: {node: '>=20.19.0'} + + unplugin@3.0.0: + resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + engines: {node: ^20.19.0 || >=22.12.0} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite-plugin-mock-dev-server@2.1.1: + resolution: {integrity: sha512-N49IFCZvy6PJY8VjJjYD8tuA7BJc5OgTLZmR83UrjFgRcQKPo0t4jPzVijalFtwA0P9v0apLXkVeNcZKytX6EQ==} + engines: {node: ^20 || >=22} + peerDependencies: + esbuild: '>=0.21.0' + rolldown: '>=1.0.0-beta.1' + vite: '>=5.0.0' + zstd-codec: '>=0.1.5' + peerDependenciesMeta: + esbuild: + optional: true + rolldown: + optional: true + zstd-codec: + optional: true + + vite@8.0.10: + resolution: {integrity: sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + vue-codemirror@6.1.1: + resolution: {integrity: sha512-rTAYo44owd282yVxKtJtnOi7ERAcXTeviwoPXjIc6K/IQYUsoDkzPvw/JDFtSP6T7Cz/2g3EHaEyeyaQCKoDMg==} + peerDependencies: + codemirror: 6.x + vue: 3.x + + vue-echarts@8.0.1: + resolution: {integrity: sha512-23rJTFLu1OUEGRWjJGmdGt8fP+8+ja1gVgzMYPIPaHWpXegcO1viIAaeu2H4QHESlVeHzUAHIxKXGrwjsyXAaA==} + peerDependencies: + echarts: ^6.0.0 + vue: ^3.3.0 + + vue-i18n@11.3.0: + resolution: {integrity: sha512-1J+xDfDJTLhDxElkd3+XUhT7FYSZd2b8pa7IRKGxhWH/8yt6PTvi3xmWhGwhYT5EaXdatui11pF2R6tL73/zPA==} + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + + vue-router@5.0.6: + resolution: {integrity: sha512-9+kmUTGbKMyW9Asoy98IXXYIzrTMT7JDAdpDDeEkorHvybpUvBI2wsrSM5jFOXrFydpzRFJ9vAh+80DN2PGu9w==} + peerDependencies: + '@pinia/colada': '>=0.21.2' + '@vue/compiler-sfc': ^3.5.17 + pinia: ^3.0.4 + vue: ^3.5.0 + peerDependenciesMeta: + '@pinia/colada': + optional: true + '@vue/compiler-sfc': + optional: true + pinia: + optional: true + + vue-tsc@3.2.7: + resolution: {integrity: sha512-zc1tL3HoQni1zGTGrwBVRQb7rGP5SWdu/m4rGB6JcnAC5MT5LFZIxF7Y+EJEnt4hGF23d60rXH7gRjHGb5KQQQ==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.33: + resolution: {integrity: sha512-1AgChhx5w3ALgT4oK3acm2Es/7jyZhWSVUfs3rOBlGQC0rjEDkS7G4lWlJJGGNQD+BV3reCwbQrOe1mPNwKHBQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vuedraggable@4.1.0: + resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==} + peerDependencies: + vue: ^3.0.1 + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + + zrender@6.0.0: + resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@ant-design/colors@7.2.1': + dependencies: + '@ant-design/fast-color': 2.0.6 + + '@ant-design/colors@8.0.1': + dependencies: + '@ant-design/fast-color': 3.0.1 + + '@ant-design/fast-color@2.0.6': + dependencies: + '@babel/runtime': 7.28.6 + + '@ant-design/fast-color@3.0.1': {} + + '@ant-design/icons-svg@4.4.2': {} + + '@antdv-next/cssinjs@1.0.6(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@emotion/hash': 0.8.0 + '@emotion/unitless': 0.7.5 + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + csstype: 3.2.3 + stylis: 4.3.6 + vue: 3.5.33(typescript@6.0.3) + + '@antdv-next/icons@1.0.6(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@ant-design/colors': 7.2.1 + '@ant-design/icons-svg': 4.4.2 + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + + '@babel/runtime@7.28.6': {} + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@codemirror/autocomplete@6.20.1': + dependencies: + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@lezer/common': 1.5.1 + + '@codemirror/commands@6.10.3': + dependencies: + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@lezer/common': 1.5.1 + + '@codemirror/lang-angular@0.1.4': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/language': 6.12.3 + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@codemirror/lang-cpp@6.0.3': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/cpp': 1.1.5 + + '@codemirror/lang-css@6.3.1': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.1 + '@lezer/css': 1.3.1 + + '@codemirror/lang-go@6.0.1': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.1 + '@lezer/go': 1.0.1 + + '@codemirror/lang-html@6.4.11': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@lezer/common': 1.5.1 + '@lezer/css': 1.3.1 + '@lezer/html': 1.3.13 + + '@codemirror/lang-java@6.0.2': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/java': 1.1.3 + + '@codemirror/lang-javascript@6.2.5': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/language': 6.12.3 + '@codemirror/lint': 6.9.5 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@lezer/common': 1.5.1 + '@lezer/javascript': 1.5.4 + + '@codemirror/lang-jinja@6.0.0': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.12.3 + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@codemirror/lang-json@6.0.2': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/json': 1.0.3 + + '@codemirror/lang-less@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.12.3 + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@codemirror/lang-liquid@6.3.2': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@codemirror/lang-markdown@6.5.0': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@lezer/common': 1.5.1 + '@lezer/markdown': 1.6.3 + + '@codemirror/lang-php@6.0.2': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.1 + '@lezer/php': 1.0.5 + + '@codemirror/lang-python@6.2.1': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.1 + '@lezer/python': 1.1.18 + + '@codemirror/lang-rust@6.0.2': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/rust': 1.0.2 + + '@codemirror/lang-sass@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.1 + '@lezer/sass': 1.1.0 + + '@codemirror/lang-sql@6.10.0': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@codemirror/lang-vue@0.1.3': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/language': 6.12.3 + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@codemirror/lang-wast@6.0.2': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@codemirror/lang-xml@6.1.0': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@lezer/common': 1.5.1 + '@lezer/xml': 1.0.6 + + '@codemirror/lang-yaml@6.1.3': + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + '@lezer/yaml': 1.0.4 + + '@codemirror/language-data@6.5.2': + dependencies: + '@codemirror/lang-angular': 0.1.4 + '@codemirror/lang-cpp': 6.0.3 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-go': 6.0.1 + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-java': 6.0.2 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/lang-jinja': 6.0.0 + '@codemirror/lang-json': 6.0.2 + '@codemirror/lang-less': 6.0.2 + '@codemirror/lang-liquid': 6.3.2 + '@codemirror/lang-markdown': 6.5.0 + '@codemirror/lang-php': 6.0.2 + '@codemirror/lang-python': 6.2.1 + '@codemirror/lang-rust': 6.0.2 + '@codemirror/lang-sass': 6.0.2 + '@codemirror/lang-sql': 6.10.0 + '@codemirror/lang-vue': 0.1.3 + '@codemirror/lang-wast': 6.0.2 + '@codemirror/lang-xml': 6.1.0 + '@codemirror/lang-yaml': 6.1.3 + '@codemirror/language': 6.12.3 + '@codemirror/legacy-modes': 6.5.2 + + '@codemirror/language@6.12.3': + dependencies: + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + style-mod: 4.1.3 + + '@codemirror/legacy-modes@6.5.2': + dependencies: + '@codemirror/language': 6.12.3 + + '@codemirror/lint@6.9.5': + dependencies: + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + crelt: 1.0.6 + + '@codemirror/search@6.6.0': + dependencies: + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + crelt: 1.0.6 + + '@codemirror/state@6.6.0': + dependencies: + '@marijn/find-cluster-break': 1.0.2 + + '@codemirror/theme-one-dark@6.1.3': + dependencies: + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@lezer/highlight': 1.2.3 + + '@codemirror/view@6.41.1': + dependencies: + '@codemirror/state': 6.6.0 + crelt: 1.0.6 + style-mod: 4.1.3 + w3c-keyname: 2.2.8 + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emotion/hash@0.8.0': {} + + '@emotion/unitless@0.7.5': {} + + '@faker-js/faker@10.4.0': {} + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/utils@0.2.11': {} + + '@hapi/bourne@3.0.0': {} + + '@iconify-json/ion@1.2.7': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/mdi@1.2.3': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/ri@1.2.10': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@iconify/vue@5.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@iconify/types': 2.0.0 + vue: 3.5.33(typescript@6.0.3) + + '@intlify/core-base@11.3.0': + dependencies: + '@intlify/devtools-types': 11.3.0 + '@intlify/message-compiler': 11.3.0 + '@intlify/shared': 11.3.0 + + '@intlify/devtools-types@11.3.0': + dependencies: + '@intlify/core-base': 11.3.0 + '@intlify/shared': 11.3.0 + + '@intlify/message-compiler@11.3.0': + dependencies: + '@intlify/shared': 11.3.0 + source-map-js: 1.2.1 + + '@intlify/shared@11.3.0': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@lezer/common@1.5.1': {} + + '@lezer/cpp@1.1.5': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/css@1.3.1': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/go@1.0.1': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/highlight@1.2.3': + dependencies: + '@lezer/common': 1.5.1 + + '@lezer/html@1.3.13': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/java@1.1.3': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/javascript@1.5.4': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/json@1.0.3': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/lr@1.4.8': + dependencies: + '@lezer/common': 1.5.1 + + '@lezer/markdown@1.6.3': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + + '@lezer/php@1.0.5': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/python@1.1.18': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/rust@1.0.2': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/sass@1.1.0': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/xml@1.0.6': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@lezer/yaml@1.0.4': + dependencies: + '@lezer/common': 1.5.1 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.8 + + '@marijn/find-cluster-break@1.0.2': {} + + '@milkdown/components@7.20.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(typescript@6.0.3)': + dependencies: + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + '@floating-ui/dom': 1.7.6 + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/exception': 7.20.0 + '@milkdown/plugin-tooltip': 7.20.0 + '@milkdown/preset-commonmark': 7.20.0 + '@milkdown/preset-gfm': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/transformer': 7.20.0 + '@milkdown/utils': 7.20.0 + '@types/lodash-es': 4.17.12 + clsx: 2.1.1 + dompurify: 3.3.3 + lodash-es: 4.18.1 + nanoid: 5.1.6 + unist-util-visit: 5.1.0 + vue: 3.5.33(typescript@6.0.3) + transitivePeerDependencies: + - supports-color + - typescript + + '@milkdown/core@7.20.0': + dependencies: + '@milkdown/ctx': 7.20.0 + '@milkdown/exception': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/transformer': 7.20.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + '@milkdown/crepe@7.20.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(typescript@6.0.3)': + dependencies: + '@codemirror/commands': 6.10.3 + '@codemirror/language': 6.12.3 + '@codemirror/language-data': 6.5.2 + '@codemirror/state': 6.6.0 + '@codemirror/theme-one-dark': 6.1.3 + '@codemirror/view': 6.41.1 + '@milkdown/kit': 7.20.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(typescript@6.0.3) + '@types/lodash-es': 4.17.12 + clsx: 2.1.1 + codemirror: 6.0.2 + katex: 0.16.38 + lodash-es: 4.18.1 + prosemirror-virtual-cursor: 0.4.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6) + remark-math: 6.0.0 + unist-util-visit: 5.1.0 + vue: 3.5.33(typescript@6.0.3) + transitivePeerDependencies: + - prosemirror-model + - prosemirror-state + - prosemirror-view + - supports-color + - typescript + + '@milkdown/ctx@7.20.0': + dependencies: + '@milkdown/exception': 7.20.0 + + '@milkdown/exception@7.20.0': {} + + '@milkdown/kit@7.20.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(typescript@6.0.3)': + dependencies: + '@milkdown/components': 7.20.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(typescript@6.0.3) + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/plugin-block': 7.20.0 + '@milkdown/plugin-clipboard': 7.20.0 + '@milkdown/plugin-cursor': 7.20.0 + '@milkdown/plugin-history': 7.20.0 + '@milkdown/plugin-indent': 7.20.0 + '@milkdown/plugin-listener': 7.20.0 + '@milkdown/plugin-slash': 7.20.0 + '@milkdown/plugin-tooltip': 7.20.0 + '@milkdown/plugin-trailing': 7.20.0 + '@milkdown/plugin-upload': 7.20.0 + '@milkdown/preset-commonmark': 7.20.0 + '@milkdown/preset-gfm': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/transformer': 7.20.0 + '@milkdown/utils': 7.20.0 + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + - supports-color + - typescript + + '@milkdown/plugin-block@7.20.0': + dependencies: + '@floating-ui/dom': 1.7.6 + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + '@types/lodash-es': 4.17.12 + lodash-es: 4.18.1 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-clipboard@7.20.0': + dependencies: + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-cursor@7.20.0': + dependencies: + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + prosemirror-drop-indicator: 0.1.3 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-history@7.20.0': + dependencies: + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-indent@7.20.0': + dependencies: + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-listener@7.20.0': + dependencies: + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@types/lodash-es': 4.17.12 + lodash-es: 4.18.1 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-prism@7.20.0': + dependencies: + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + '@types/hast': 3.0.4 + refractor: 5.0.0 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-slash@7.20.0': + dependencies: + '@floating-ui/dom': 1.7.6 + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + '@types/lodash-es': 4.17.12 + lodash-es: 4.18.1 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-tooltip@7.20.0': + dependencies: + '@floating-ui/dom': 1.7.6 + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + '@types/lodash-es': 4.17.12 + lodash-es: 4.18.1 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-trailing@7.20.0': + dependencies: + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + transitivePeerDependencies: + - supports-color + + '@milkdown/plugin-upload@7.20.0': + dependencies: + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/exception': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/utils': 7.20.0 + transitivePeerDependencies: + - supports-color + + '@milkdown/preset-commonmark@7.20.0': + dependencies: + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/exception': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/transformer': 7.20.0 + '@milkdown/utils': 7.20.0 + remark-inline-links: 7.0.0 + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@milkdown/preset-gfm@7.20.0': + dependencies: + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/exception': 7.20.0 + '@milkdown/preset-commonmark': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/transformer': 7.20.0 + '@milkdown/utils': 7.20.0 + prosemirror-safari-ime-span: 1.0.2 + remark-gfm: 4.0.1 + transitivePeerDependencies: + - supports-color + + '@milkdown/prose@7.20.0': + dependencies: + '@milkdown/exception': 7.20.0 + prosemirror-changeset: 2.4.0 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.2 + prosemirror-gapcursor: 1.4.1 + prosemirror-history: 1.5.0 + prosemirror-inputrules: 1.5.1 + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-schema-list: 1.5.1 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.5 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + '@milkdown/theme-nord@7.20.0': + dependencies: + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/prose': 7.20.0 + clsx: 2.1.1 + transitivePeerDependencies: + - supports-color + + '@milkdown/transformer@7.20.0': + dependencies: + '@milkdown/exception': 7.20.0 + '@milkdown/prose': 7.20.0 + remark: 15.0.1 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + '@milkdown/utils@7.20.0': + dependencies: + '@milkdown/core': 7.20.0 + '@milkdown/ctx': 7.20.0 + '@milkdown/exception': 7.20.0 + '@milkdown/prose': 7.20.0 + '@milkdown/transformer': 7.20.0 + nanoid: 5.1.6 + transitivePeerDependencies: + - supports-color + + '@milkdown/vue@7.20.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@milkdown/crepe': 7.20.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(typescript@6.0.3) + '@milkdown/kit': 7.20.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(typescript@6.0.3) + vue: 3.5.33(typescript@6.0.3) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + - prosemirror-model + - prosemirror-state + - prosemirror-view + - supports-color + - typescript + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@noble/hashes@1.8.0': {} + + '@ocavue/utils@1.5.0': {} + + '@oxc-project/types@0.127.0': {} + + '@oxfmt/binding-android-arm-eabi@0.43.0': + optional: true + + '@oxfmt/binding-android-arm64@0.43.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.43.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.43.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.43.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.43.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.43.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.43.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.43.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.43.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.43.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.43.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.43.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.43.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.43.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.43.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.43.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.43.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.43.0': + optional: true + + '@oxlint/binding-android-arm-eabi@1.62.0': + optional: true + + '@oxlint/binding-android-arm64@1.62.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.62.0': + optional: true + + '@oxlint/binding-darwin-x64@1.62.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.62.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.62.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.62.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.62.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.62.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.62.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.62.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.62.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.62.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.62.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.62.0': + optional: true + + '@paralleldrive/cuid2@2.3.1': + dependencies: + '@noble/hashes': 1.8.0 + + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.3 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + optional: true + + '@pengzhanbo/utils@3.3.1': {} + + '@rolldown/binding-android-arm64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': + optional: true + + '@rolldown/pluginutils@1.0.0-rc.17': {} + + '@rolldown/pluginutils@1.0.0-rc.2': {} + + '@tailwindcss/node@4.2.4': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.20.0 + jiti: 2.6.1 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.4 + + '@tailwindcss/oxide-android-arm64@4.2.4': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.2.4': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.2.4': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.2.4': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.2.4': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.2.4': + optional: true + + '@tailwindcss/oxide@4.2.4': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.2.4 + '@tailwindcss/oxide-darwin-arm64': 4.2.4 + '@tailwindcss/oxide-darwin-x64': 4.2.4 + '@tailwindcss/oxide-freebsd-x64': 4.2.4 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.4 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.4 + '@tailwindcss/oxide-linux-x64-musl': 4.2.4 + '@tailwindcss/oxide-wasm32-wasi': 4.2.4 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.4 + + '@tailwindcss/vite@4.2.4(vite@8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2))': + dependencies: + '@tailwindcss/node': 4.2.4 + '@tailwindcss/oxide': 4.2.4 + tailwindcss: 4.2.4 + vite: 8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2) + + '@tiptap/core@3.22.5(@tiptap/pm@3.22.5)': + dependencies: + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-blockquote@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-bold@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-bubble-menu@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)': + dependencies: + '@floating-ui/dom': 1.7.6 + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + optional: true + + '@tiptap/extension-bullet-list@3.22.5(@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/extension-list': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + + '@tiptap/extension-code-block@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-code@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-document@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-dropcursor@3.22.5(@tiptap/extensions@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/extensions': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + + '@tiptap/extension-floating-menu@3.22.5(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)': + dependencies: + '@floating-ui/dom': 1.7.6 + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + optional: true + + '@tiptap/extension-gapcursor@3.22.5(@tiptap/extensions@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/extensions': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + + '@tiptap/extension-hard-break@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-heading@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-horizontal-rule@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-image@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-italic@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-link@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + linkifyjs: 4.3.2 + + '@tiptap/extension-list-item@3.22.5(@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/extension-list': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + + '@tiptap/extension-list-keymap@3.22.5(@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/extension-list': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + + '@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + + '@tiptap/extension-ordered-list@3.22.5(@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/extension-list': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + + '@tiptap/extension-paragraph@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-placeholder@3.22.5(@tiptap/extensions@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/extensions': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + + '@tiptap/extension-strike@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-text@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extension-underline@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + + '@tiptap/extensions@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + + '@tiptap/pm@3.22.5': + dependencies: + prosemirror-changeset: 2.4.0 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.2 + prosemirror-gapcursor: 1.4.1 + prosemirror-history: 1.5.0 + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-schema-list: 1.5.1 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.5 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + '@tiptap/starter-kit@3.22.5': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/extension-blockquote': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-bold': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-bullet-list': 3.22.5(@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)) + '@tiptap/extension-code': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-code-block': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-document': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-dropcursor': 3.22.5(@tiptap/extensions@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)) + '@tiptap/extension-gapcursor': 3.22.5(@tiptap/extensions@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)) + '@tiptap/extension-hard-break': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-heading': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-horizontal-rule': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-italic': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-link': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-list': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-list-item': 3.22.5(@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)) + '@tiptap/extension-list-keymap': 3.22.5(@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)) + '@tiptap/extension-ordered-list': 3.22.5(@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)) + '@tiptap/extension-paragraph': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-strike': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-text': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-underline': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extensions': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + + '@tiptap/vue-3@3.22.5(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@floating-ui/dom': 1.7.6 + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + vue: 3.5.33(typescript@6.0.3) + optionalDependencies: + '@tiptap/extension-bubble-menu': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-floating-menu': 3.22.5(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/katex@0.16.8': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.24 + + '@types/lodash@4.17.24': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + + '@types/prismjs@1.26.6': {} + + '@types/trusted-types@2.0.7': + optional: true + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.21': {} + + '@uiw/codemirror-theme-dracula@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)': + dependencies: + '@uiw/codemirror-themes': 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + + '@uiw/codemirror-theme-github@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)': + dependencies: + '@uiw/codemirror-themes': 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + + '@uiw/codemirror-theme-material@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)': + dependencies: + '@uiw/codemirror-themes': 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + + '@uiw/codemirror-theme-monokai@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)': + dependencies: + '@uiw/codemirror-themes': 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + + '@uiw/codemirror-theme-nord@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)': + dependencies: + '@uiw/codemirror-themes': 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + + '@uiw/codemirror-theme-solarized@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)': + dependencies: + '@uiw/codemirror-themes': 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + + '@uiw/codemirror-theme-tokyo-night@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)': + dependencies: + '@uiw/codemirror-themes': 4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + + '@uiw/codemirror-themes@4.25.9(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)': + dependencies: + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + + '@v-c/async-validator@1.0.1': {} + + '@v-c/cascader@1.0.3(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/select': 1.0.20(vue@3.5.33(typescript@6.0.3)) + '@v-c/tree': 1.0.6(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/checkbox@1.0.1(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/collapse@1.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/color-picker@1.0.6(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@ant-design/fast-color': 3.0.1 + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/dialog@1.0.3(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/drawer@1.0.6(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/dropdown@1.0.2(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/trigger': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/image@1.0.11(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/input-number@1.0.5(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/input': 1.0.3(vue@3.5.33(typescript@6.0.3)) + '@v-c/mini-decimal': 1.0.1 + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/input@1.0.3(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/mentions@1.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/input': 1.0.3(vue@3.5.33(typescript@6.0.3)) + '@v-c/menu': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/textarea': 1.0.4(vue@3.5.33(typescript@6.0.3)) + '@v-c/trigger': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/menu@1.0.14(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/overflow': 1.0.5(vue@3.5.33(typescript@6.0.3)) + '@v-c/trigger': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/mini-decimal@1.0.1': {} + + '@v-c/mutate-observer@1.0.1(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/notification@1.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/overflow@1.0.4(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/overflow@1.0.5(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/pagination@1.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/picker@1.0.4(dayjs@1.11.20)(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/overflow': 1.0.4(vue@3.5.33(typescript@6.0.3)) + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/trigger': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + optionalDependencies: + dayjs: 1.11.20 + + '@v-c/portal@1.0.8(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/progress@1.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/qrcode@1.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/rate@1.0.1(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/resize-observer@1.0.8(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + resize-observer-polyfill: 1.5.1 + vue: 3.5.33(typescript@6.0.3) + + '@v-c/segmented@1.0.2(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/select@1.0.20(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/overflow': 1.0.4(vue@3.5.33(typescript@6.0.3)) + '@v-c/trigger': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + '@v-c/virtual-list': 1.0.7(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/slick@1.0.2(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + es-toolkit: 1.45.1 + vue: 3.5.33(typescript@6.0.3) + + '@v-c/slider@1.0.10(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/steps@1.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/switch@1.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/table@1.0.7(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + '@v-c/virtual-list': 1.0.7(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/tabs@1.0.2(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/dropdown': 1.0.2(vue@3.5.33(typescript@6.0.3)) + '@v-c/menu': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/overflow': 1.0.4(vue@3.5.33(typescript@6.0.3)) + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/textarea@1.0.4(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/input': 1.0.3(vue@3.5.33(typescript@6.0.3)) + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/tooltip@1.0.3(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/trigger': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/tour@1.0.3(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/trigger': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/tree-select@1.0.3(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/select': 1.0.20(vue@3.5.33(typescript@6.0.3)) + '@v-c/tree': 1.0.6(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/tree@1.0.6(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + '@v-c/virtual-list': 1.0.7(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/trigger@1.0.14(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/upload@1.0.0(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@v-c/util@1.0.19(vue@3.5.33(typescript@6.0.3))': + dependencies: + vue: 3.5.33(typescript@6.0.3) + + '@v-c/virtual-list@1.0.7(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@vitejs/plugin-vue@6.0.5(vite@8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2))(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.2 + vite: 8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2) + vue: 3.5.33(typescript@6.0.3) + + '@volar/language-core@2.4.28': + dependencies: + '@volar/source-map': 2.4.28 + + '@volar/source-map@2.4.28': {} + + '@volar/typescript@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue-macros/common@3.1.2(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@vue/compiler-sfc': 3.5.30 + ast-kit: 2.2.0 + local-pkg: 1.1.2 + magic-string-ast: 1.0.3 + unplugin-utils: 0.3.1 + optionalDependencies: + vue: 3.5.33(typescript@6.0.3) + + '@vue/compiler-core@3.5.30': + dependencies: + '@babel/parser': 7.29.0 + '@vue/shared': 3.5.30 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-core@3.5.33': + dependencies: + '@babel/parser': 7.29.2 + '@vue/shared': 3.5.33 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.30': + dependencies: + '@vue/compiler-core': 3.5.30 + '@vue/shared': 3.5.30 + + '@vue/compiler-dom@3.5.33': + dependencies: + '@vue/compiler-core': 3.5.33 + '@vue/shared': 3.5.33 + + '@vue/compiler-sfc@3.5.30': + dependencies: + '@babel/parser': 7.29.0 + '@vue/compiler-core': 3.5.30 + '@vue/compiler-dom': 3.5.30 + '@vue/compiler-ssr': 3.5.30 + '@vue/shared': 3.5.30 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.8 + source-map-js: 1.2.1 + + '@vue/compiler-sfc@3.5.33': + dependencies: + '@babel/parser': 7.29.2 + '@vue/compiler-core': 3.5.33 + '@vue/compiler-dom': 3.5.33 + '@vue/compiler-ssr': 3.5.33 + '@vue/shared': 3.5.33 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.12 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.30': + dependencies: + '@vue/compiler-dom': 3.5.30 + '@vue/shared': 3.5.30 + + '@vue/compiler-ssr@3.5.33': + dependencies: + '@vue/compiler-dom': 3.5.33 + '@vue/shared': 3.5.33 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-api@7.7.9': + dependencies: + '@vue/devtools-kit': 7.7.9 + + '@vue/devtools-api@8.1.0': + dependencies: + '@vue/devtools-kit': 8.1.0 + + '@vue/devtools-kit@7.7.9': + dependencies: + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-kit@8.1.0': + dependencies: + '@vue/devtools-shared': 8.1.0 + birpc: 2.9.0 + hookable: 5.5.3 + perfect-debounce: 2.1.0 + + '@vue/devtools-shared@7.7.9': + dependencies: + rfdc: 1.4.1 + + '@vue/devtools-shared@8.1.0': {} + + '@vue/language-core@3.2.7': + dependencies: + '@volar/language-core': 2.4.28 + '@vue/compiler-dom': 3.5.30 + '@vue/shared': 3.5.30 + alien-signals: 3.1.2 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + picomatch: 4.0.4 + + '@vue/reactivity@3.5.33': + dependencies: + '@vue/shared': 3.5.33 + + '@vue/runtime-core@3.5.33': + dependencies: + '@vue/reactivity': 3.5.33 + '@vue/shared': 3.5.33 + + '@vue/runtime-dom@3.5.33': + dependencies: + '@vue/reactivity': 3.5.33 + '@vue/runtime-core': 3.5.33 + '@vue/shared': 3.5.33 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@vue/compiler-ssr': 3.5.33 + '@vue/shared': 3.5.33 + vue: 3.5.33(typescript@6.0.3) + + '@vue/shared@3.5.30': {} + + '@vue/shared@3.5.33': {} + + '@vueuse/core@14.2.1(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 14.2.1 + '@vueuse/shared': 14.2.1(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + + '@vueuse/metadata@14.2.1': {} + + '@vueuse/shared@14.2.1(vue@3.5.33(typescript@6.0.3))': + dependencies: + vue: 3.5.33(typescript@6.0.3) + + acorn@8.16.0: {} + + alien-signals@3.1.2: {} + + ansis@4.2.0: {} + + antdv-next@1.2.2(vue@3.5.33(typescript@6.0.3)): + dependencies: + '@ant-design/colors': 8.0.1 + '@ant-design/fast-color': 3.0.1 + '@antdv-next/cssinjs': 1.0.6(vue@3.5.33(typescript@6.0.3)) + '@antdv-next/icons': 1.0.6(vue@3.5.33(typescript@6.0.3)) + '@v-c/async-validator': 1.0.1 + '@v-c/cascader': 1.0.3(vue@3.5.33(typescript@6.0.3)) + '@v-c/checkbox': 1.0.1(vue@3.5.33(typescript@6.0.3)) + '@v-c/collapse': 1.0.0(vue@3.5.33(typescript@6.0.3)) + '@v-c/color-picker': 1.0.6(vue@3.5.33(typescript@6.0.3)) + '@v-c/dialog': 1.0.3(vue@3.5.33(typescript@6.0.3)) + '@v-c/drawer': 1.0.6(vue@3.5.33(typescript@6.0.3)) + '@v-c/dropdown': 1.0.2(vue@3.5.33(typescript@6.0.3)) + '@v-c/image': 1.0.11(vue@3.5.33(typescript@6.0.3)) + '@v-c/input': 1.0.3(vue@3.5.33(typescript@6.0.3)) + '@v-c/input-number': 1.0.5(vue@3.5.33(typescript@6.0.3)) + '@v-c/mentions': 1.0.0(vue@3.5.33(typescript@6.0.3)) + '@v-c/menu': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/mutate-observer': 1.0.1(vue@3.5.33(typescript@6.0.3)) + '@v-c/notification': 1.0.0(vue@3.5.33(typescript@6.0.3)) + '@v-c/pagination': 1.0.0(vue@3.5.33(typescript@6.0.3)) + '@v-c/picker': 1.0.4(dayjs@1.11.20)(vue@3.5.33(typescript@6.0.3)) + '@v-c/progress': 1.0.0(vue@3.5.33(typescript@6.0.3)) + '@v-c/qrcode': 1.0.0(vue@3.5.33(typescript@6.0.3)) + '@v-c/rate': 1.0.1(vue@3.5.33(typescript@6.0.3)) + '@v-c/resize-observer': 1.0.8(vue@3.5.33(typescript@6.0.3)) + '@v-c/segmented': 1.0.2(vue@3.5.33(typescript@6.0.3)) + '@v-c/select': 1.0.20(vue@3.5.33(typescript@6.0.3)) + '@v-c/slick': 1.0.2(vue@3.5.33(typescript@6.0.3)) + '@v-c/slider': 1.0.10(vue@3.5.33(typescript@6.0.3)) + '@v-c/steps': 1.0.0(vue@3.5.33(typescript@6.0.3)) + '@v-c/switch': 1.0.0(vue@3.5.33(typescript@6.0.3)) + '@v-c/table': 1.0.7(vue@3.5.33(typescript@6.0.3)) + '@v-c/tabs': 1.0.2(vue@3.5.33(typescript@6.0.3)) + '@v-c/textarea': 1.0.4(vue@3.5.33(typescript@6.0.3)) + '@v-c/tooltip': 1.0.3(vue@3.5.33(typescript@6.0.3)) + '@v-c/tour': 1.0.3(vue@3.5.33(typescript@6.0.3)) + '@v-c/tree': 1.0.6(vue@3.5.33(typescript@6.0.3)) + '@v-c/tree-select': 1.0.3(vue@3.5.33(typescript@6.0.3)) + '@v-c/trigger': 1.0.14(vue@3.5.33(typescript@6.0.3)) + '@v-c/upload': 1.0.0(vue@3.5.33(typescript@6.0.3)) + '@v-c/util': 1.0.19(vue@3.5.33(typescript@6.0.3)) + '@v-c/virtual-list': 1.0.7(vue@3.5.33(typescript@6.0.3)) + '@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3)) + dayjs: 1.11.20 + es-toolkit: 1.45.1 + scroll-into-view-if-needed: 3.1.0 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - date-fns + - luxon + - moment + - vue + + asap@2.0.6: {} + + ast-kit@2.2.0: + dependencies: + '@babel/parser': 7.29.0 + pathe: 2.0.3 + + ast-walker-scope@0.8.3: + dependencies: + '@babel/parser': 7.29.0 + ast-kit: 2.2.0 + + asynckit@0.4.0: {} + + axios@1.15.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.5 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + + bail@2.0.2: {} + + birpc@2.9.0: {} + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + ccount@2.0.1: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + clsx@2.1.1: {} + + co-body@6.2.0: + dependencies: + '@hapi/bourne': 3.0.0 + inflation: 2.1.0 + qs: 6.15.0 + raw-body: 2.5.3 + type-is: 1.6.18 + + codemirror@6.0.2: + dependencies: + '@codemirror/autocomplete': 6.20.1 + '@codemirror/commands': 6.10.3 + '@codemirror/language': 6.12.3 + '@codemirror/lint': 6.9.5 + '@codemirror/search': 6.6.0 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + commander@8.3.0: {} + + compute-scroll-into-view@3.1.1: {} + + confbox@0.1.8: {} + + confbox@0.2.4: {} + + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + crelt@1.0.6: {} + + csstype@3.2.3: {} + + dayjs@1.11.20: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + dequal@2.0.3: {} + + detect-libc@2.1.2: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + dompurify@3.3.3: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + echarts@6.0.0: + dependencies: + tslib: 2.3.0 + zrender: 6.0.0 + + enhanced-resolve@5.20.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + entities@7.0.1: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-toolkit@1.45.1: {} + + escape-string-regexp@5.0.0: {} + + estree-walker@2.0.2: {} + + exsolve@1.0.8: {} + + extend@3.0.2: {} + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + follow-redirects@1.15.11: {} + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + formidable@3.5.4: + dependencies: + '@paralleldrive/cuid2': 2.3.1 + dezalgo: 1.0.4 + once: 1.4.0 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + 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 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + + hookable@5.5.3: {} + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + http-status@2.1.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + immutable@5.1.5: {} + + inflation@2.1.0: {} + + inherits@2.0.4: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-decimal@2.0.1: {} + + is-extglob@2.1.1: + optional: true + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + optional: true + + is-hexadecimal@2.0.1: {} + + is-plain-obj@4.1.0: {} + + is-what@5.5.0: {} + + jiti@2.6.1: {} + + jsesc@3.1.0: {} + + json5@2.2.3: {} + + katex@0.16.38: + dependencies: + commander: 8.3.0 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + linkifyjs@4.3.2: {} + + local-pkg@1.1.2: + dependencies: + mlly: 1.8.1 + pkg-types: 2.3.0 + quansync: 0.2.11 + + lodash-es@4.18.1: {} + + longest-streak@3.1.0: {} + + magic-string-ast@1.0.3: + dependencies: + magic-string: 0.30.21 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + markdown-table@3.0.4: {} + + math-intrinsics@1.1.0: {} + + mdast-util-definitions@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.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.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-math@3.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + media-typer@0.3.0: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-math@3.1.0: + dependencies: + '@types/katex': 0.16.8 + devlop: 1.1.0 + katex: 0.16.38 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mitt@3.0.1: {} + + mlly@1.8.1: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + nanoid@3.3.11: {} + + nanoid@5.1.6: {} + + node-addon-api@7.1.1: + optional: true + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + orderedmap@2.1.1: {} + + oxfmt@0.43.0: + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.43.0 + '@oxfmt/binding-android-arm64': 0.43.0 + '@oxfmt/binding-darwin-arm64': 0.43.0 + '@oxfmt/binding-darwin-x64': 0.43.0 + '@oxfmt/binding-freebsd-x64': 0.43.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.43.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.43.0 + '@oxfmt/binding-linux-arm64-gnu': 0.43.0 + '@oxfmt/binding-linux-arm64-musl': 0.43.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.43.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.43.0 + '@oxfmt/binding-linux-riscv64-musl': 0.43.0 + '@oxfmt/binding-linux-s390x-gnu': 0.43.0 + '@oxfmt/binding-linux-x64-gnu': 0.43.0 + '@oxfmt/binding-linux-x64-musl': 0.43.0 + '@oxfmt/binding-openharmony-arm64': 0.43.0 + '@oxfmt/binding-win32-arm64-msvc': 0.43.0 + '@oxfmt/binding-win32-ia32-msvc': 0.43.0 + '@oxfmt/binding-win32-x64-msvc': 0.43.0 + + oxlint@1.62.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.62.0 + '@oxlint/binding-android-arm64': 1.62.0 + '@oxlint/binding-darwin-arm64': 1.62.0 + '@oxlint/binding-darwin-x64': 1.62.0 + '@oxlint/binding-freebsd-x64': 1.62.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.62.0 + '@oxlint/binding-linux-arm-musleabihf': 1.62.0 + '@oxlint/binding-linux-arm64-gnu': 1.62.0 + '@oxlint/binding-linux-arm64-musl': 1.62.0 + '@oxlint/binding-linux-ppc64-gnu': 1.62.0 + '@oxlint/binding-linux-riscv64-gnu': 1.62.0 + '@oxlint/binding-linux-riscv64-musl': 1.62.0 + '@oxlint/binding-linux-s390x-gnu': 1.62.0 + '@oxlint/binding-linux-x64-gnu': 1.62.0 + '@oxlint/binding-linux-x64-musl': 1.62.0 + '@oxlint/binding-openharmony-arm64': 1.62.0 + '@oxlint/binding-win32-arm64-msvc': 1.62.0 + '@oxlint/binding-win32-ia32-msvc': 1.62.0 + '@oxlint/binding-win32-x64-msvc': 1.62.0 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + path-browserify@1.0.1: {} + + path-to-regexp@8.3.0: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + perfect-debounce@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.3: {} + + picomatch@4.0.4: {} + + pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)): + dependencies: + '@vue/devtools-api': 7.7.9 + vue: 3.5.33(typescript@6.0.3) + optionalDependencies: + typescript: 6.0.3 + + pinyin-pro@3.28.0: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.1 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + + postcss@8.5.12: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.8: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + property-information@7.1.0: {} + + prosemirror-changeset@2.4.0: + dependencies: + prosemirror-transform: 1.11.0 + + prosemirror-commands@1.7.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-drop-indicator@0.1.3: + dependencies: + '@ocavue/utils': 1.5.0 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.6 + + prosemirror-dropcursor@1.8.2: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + prosemirror-gapcursor@1.4.1: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.6 + + prosemirror-history@1.5.0: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + rope-sequence: 1.3.4 + + prosemirror-inputrules@1.5.1: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-keymap@1.2.3: + dependencies: + prosemirror-state: 1.4.4 + w3c-keyname: 2.2.8 + + prosemirror-model@1.25.4: + dependencies: + orderedmap: 2.1.1 + + prosemirror-safari-ime-span@1.0.2: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.6 + + prosemirror-schema-list@1.5.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-state@1.4.4: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + prosemirror-tables@1.8.5: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + prosemirror-transform@1.11.0: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-view@1.41.6: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-virtual-cursor@0.4.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6): + optionalDependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.6 + + proxy-from-env@2.1.0: {} + + qs@6.15.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.11: {} + + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readdirp@4.1.2: {} + + readdirp@5.0.0: {} + + refractor@5.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/prismjs': 1.26.6 + hastscript: 9.0.1 + parse-entities: 4.0.2 + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-inline-links@7.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-definitions: 6.0.0 + unist-util-visit: 5.1.0 + + remark-math@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + resize-observer-polyfill@1.5.1: {} + + rfdc@1.4.1: {} + + rolldown@1.0.0-rc.17: + dependencies: + '@oxc-project/types': 0.127.0 + '@rolldown/pluginutils': 1.0.0-rc.17 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-x64': 1.0.0-rc.17 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.17 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 + + rope-sequence@1.3.4: {} + + safer-buffer@2.1.2: {} + + sass@1.98.0: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.5 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.6 + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + + scule@1.3.0: {} + + setprototypeof@1.2.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + sortablejs@1.14.0: {} + + source-map-js@1.2.1: {} + + space-separated-tokens@2.0.2: {} + + speakingurl@14.0.1: {} + + statuses@2.0.2: {} + + style-mod@4.1.3: {} + + stylis@4.3.6: {} + + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + + tailwindcss@4.2.4: {} + + tapable@2.3.0: {} + + throttle-debounce@5.0.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinypool@2.1.0: {} + + toidentifier@1.0.1: {} + + trough@2.2.0: {} + + tslib@2.3.0: {} + + tslib@2.8.1: + optional: true + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typescript@6.0.3: {} + + ufo@1.6.3: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + unpipe@1.0.0: {} + + unplugin-utils@0.3.1: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + + unplugin@3.0.0: + dependencies: + '@jridgewell/remapping': 2.3.5 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + + vary@1.1.2: {} + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite-plugin-mock-dev-server@2.1.1(rolldown@1.0.0-rc.17)(vite@8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2)): + dependencies: + '@pengzhanbo/utils': 3.3.1 + ansis: 4.2.0 + chokidar: 5.0.0 + co-body: 6.2.0 + cors: 2.8.6 + debug: 4.4.3 + formidable: 3.5.4 + http-status: 2.1.0 + is-core-module: 2.16.1 + json5: 2.2.3 + local-pkg: 1.1.2 + mime-types: 3.0.2 + path-to-regexp: 8.3.0 + picomatch: 4.0.4 + tinyglobby: 0.2.15 + vite: 8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2) + ws: 8.20.0 + optionalDependencies: + rolldown: 1.0.0-rc.17 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + vite@8.0.10(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.12 + rolldown: 1.0.0-rc.17 + tinyglobby: 0.2.16 + optionalDependencies: + fsevents: 2.3.3 + jiti: 2.6.1 + sass: 1.98.0 + yaml: 2.8.2 + + vscode-uri@3.1.0: {} + + vue-codemirror@6.1.1(codemirror@6.0.2)(vue@3.5.33(typescript@6.0.3)): + dependencies: + '@codemirror/commands': 6.10.3 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.41.1 + codemirror: 6.0.2 + vue: 3.5.33(typescript@6.0.3) + + vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.33(typescript@6.0.3)): + dependencies: + echarts: 6.0.0 + vue: 3.5.33(typescript@6.0.3) + + vue-i18n@11.3.0(vue@3.5.33(typescript@6.0.3)): + dependencies: + '@intlify/core-base': 11.3.0 + '@intlify/devtools-types': 11.3.0 + '@intlify/shared': 11.3.0 + '@vue/devtools-api': 6.6.4 + vue: 3.5.33(typescript@6.0.3) + + vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)): + dependencies: + '@babel/generator': 7.29.1 + '@vue-macros/common': 3.1.2(vue@3.5.33(typescript@6.0.3)) + '@vue/devtools-api': 8.1.0 + ast-walker-scope: 0.8.3 + chokidar: 5.0.0 + json5: 2.2.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.1 + muggle-string: 0.4.1 + pathe: 2.0.3 + picomatch: 4.0.3 + scule: 1.3.0 + tinyglobby: 0.2.15 + unplugin: 3.0.0 + unplugin-utils: 0.3.1 + vue: 3.5.33(typescript@6.0.3) + yaml: 2.8.2 + optionalDependencies: + '@vue/compiler-sfc': 3.5.33 + pinia: 3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)) + + vue-tsc@3.2.7(typescript@6.0.3): + dependencies: + '@volar/typescript': 2.4.28 + '@vue/language-core': 3.2.7 + typescript: 6.0.3 + + vue@3.5.33(typescript@6.0.3): + dependencies: + '@vue/compiler-dom': 3.5.33 + '@vue/compiler-sfc': 3.5.33 + '@vue/runtime-dom': 3.5.33 + '@vue/server-renderer': 3.5.33(vue@3.5.33(typescript@6.0.3)) + '@vue/shared': 3.5.33 + optionalDependencies: + typescript: 6.0.3 + + vuedraggable@4.1.0(vue@3.5.33(typescript@6.0.3)): + dependencies: + sortablejs: 1.14.0 + vue: 3.5.33(typescript@6.0.3) + + w3c-keyname@2.2.8: {} + + webpack-virtual-modules@0.6.2: {} + + wrappy@1.0.2: {} + + ws@8.20.0: {} + + yaml@2.8.2: {} + + zrender@6.0.0: + dependencies: + tslib: 2.3.0 + + zwitch@2.0.4: {} diff --git a/antdv-next-admin/public/.nojekyll b/antdv-next-admin/public/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/antdv-next-admin/public/404.html b/antdv-next-admin/public/404.html new file mode 100644 index 0000000..5f58c19 --- /dev/null +++ b/antdv-next-admin/public/404.html @@ -0,0 +1,16 @@ + + + + + Antdv Next Admin + + + + +

Redirecting...

+ + diff --git a/antdv-next-admin/public/logo.png b/antdv-next-admin/public/logo.png new file mode 100644 index 0000000..3420482 Binary files /dev/null and b/antdv-next-admin/public/logo.png differ diff --git a/antdv-next-admin/public/logo.svg b/antdv-next-admin/public/logo.svg new file mode 100644 index 0000000..9ded453 --- /dev/null +++ b/antdv-next-admin/public/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + A + diff --git a/antdv-next-admin/src/App.vue b/antdv-next-admin/src/App.vue new file mode 100644 index 0000000..9997d70 --- /dev/null +++ b/antdv-next-admin/src/App.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/antdv-next-admin/src/api/auth.ts b/antdv-next-admin/src/api/auth.ts new file mode 100644 index 0000000..c81759e --- /dev/null +++ b/antdv-next-admin/src/api/auth.ts @@ -0,0 +1,32 @@ +import type { ApiResponse } from '@/types/api'; +import type { LoginParams, LoginResult, User } from '@/types/auth'; + +import { request } from '@/utils/request'; + +/** + * Login + */ +export function login(data: LoginParams): Promise> { + return request.post('/auth/login', data); +} + +/** + * Logout + */ +export function logout(): Promise> { + return request.post('/auth/logout'); +} + +/** + * Get user info + */ +export function getUserInfo(): Promise> { + return request.get('/auth/info'); +} + +/** + * Refresh token + */ +export function refreshToken(refreshToken: string): Promise> { + return request.post('/auth/refresh', { refreshToken }); +} diff --git a/antdv-next-admin/src/api/config.ts b/antdv-next-admin/src/api/config.ts new file mode 100644 index 0000000..8ffaada --- /dev/null +++ b/antdv-next-admin/src/api/config.ts @@ -0,0 +1,111 @@ +import type { ApiResponse } from "@/types/api"; +import type { SysConfig, SysConfigQueryParams } from "@/types/config"; + +import { request } from "@/utils/request"; + +const isMock = import.meta.env.VITE_USE_MOCK === "true"; + +const ok = (data: T, message = "success"): ApiResponse => ({ + code: 200, + message, + data, + success: true, +}); + +const error = (code: number, message: string): ApiResponse => ({ + code, + message, + data: null as T, + success: false, +}); + +export async function getConfigList(params: SysConfigQueryParams): Promise< + ApiResponse<{ + list: SysConfig[]; + total: number; + page: number; + pageSize: number; + }> +> { + if (!isMock) return request.get("/config/list", { params }); + + const { sysConfigs } = await import("../../mock/data/config.data"); + const { page = 1, pageSize = 10, key, group } = params; + let filtered = [...sysConfigs]; + + if (key) filtered = filtered.filter((item) => item.key.includes(key)); + if (group) filtered = filtered.filter((item) => item.group === group); + + filtered.sort((a, b) => a.sort - b.sort); + + const start = (page - 1) * pageSize; + const list = filtered.slice(start, start + pageSize); + + return ok({ list, total: filtered.length, page, pageSize }); +} + +export async function getConfigByKey( + key: string, +): Promise> { + if (!isMock) return request.get(`/config/key/${key}`); + + const { sysConfigs } = await import("../../mock/data/config.data"); + const config = sysConfigs.find((item) => item.key === key); + if (!config) return error(404, "配置不存在"); + return ok(config); +} + +export async function createConfig( + data: Partial, +): Promise> { + if (!isMock) return request.post("/config", data); + + const { sysConfigs } = await import("../../mock/data/config.data"); + const newConfig: SysConfig = { + id: String(Date.now()), + name: data.name || "", + key: data.key || "", + value: data.value || "", + valueType: data.valueType || "string", + group: data.group || "basic", + description: data.description, + builtIn: false, + sort: data.sort || 99, + createTime: new Date().toISOString().replace("T", " ").slice(0, 19), + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + sysConfigs.push(newConfig); + return ok(newConfig, "创建成功"); +} + +export async function updateConfig( + id: string, + data: Partial, +): Promise> { + if (!isMock) return request.put(`/config/${id}`, data); + + const { sysConfigs } = await import("../../mock/data/config.data"); + const index = sysConfigs.findIndex((item) => item.id === id); + if (index === -1) return error(404, "配置不存在"); + + sysConfigs[index] = { + ...sysConfigs[index], + ...data, + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + return ok(sysConfigs[index], "更新成功"); +} + +export async function deleteConfig(id: string): Promise> { + if (!isMock) return request.delete(`/config/${id}`); + + const { sysConfigs } = await import("../../mock/data/config.data"); + const index = sysConfigs.findIndex((item) => item.id === id); + if (index === -1) return error(404, "配置不存在"); + + const config = sysConfigs[index]; + if (config.builtIn) return error(400, "内置配置不可删除"); + + sysConfigs.splice(index, 1); + return ok(undefined as unknown as void, "删除成功"); +} diff --git a/antdv-next-admin/src/api/dept.ts b/antdv-next-admin/src/api/dept.ts new file mode 100644 index 0000000..451e7bf --- /dev/null +++ b/antdv-next-admin/src/api/dept.ts @@ -0,0 +1,122 @@ +import type { ApiResponse } from "@/types/api"; +import type { Department, DeptQueryParams } from "@/types/dept"; + +import { request } from "@/utils/request"; + +const isMock = import.meta.env.VITE_USE_MOCK === "true"; + +const ok = (data: T, message = "success"): ApiResponse => ({ + code: 200, + message, + data, + success: true, +}); + +const error = (code: number, message: string): ApiResponse => ({ + code, + message, + data: null as T, + success: false, +}); + +/** + * 获取部门树 + */ +export async function getDeptTree( + params?: DeptQueryParams, +): Promise> { + if (!isMock) return request.get("/dept/tree", { params }); + + const { departments, buildDeptTree } = + await import("../../mock/data/dept.data"); + const { name, status } = params || {}; + let filtered = [...departments]; + + if (name) filtered = filtered.filter((item) => item.name.includes(name)); + if (status) filtered = filtered.filter((item) => item.status === status); + + return ok(buildDeptTree(filtered)); +} + +/** + * 获取部门列表(扁平) + */ +export async function getDeptList( + params?: DeptQueryParams, +): Promise> { + if (!isMock) return request.get("/dept/list", { params }); + + const { departments } = await import("../../mock/data/dept.data"); + const { name, status } = params || {}; + let filtered = [...departments]; + + if (name) filtered = filtered.filter((item) => item.name.includes(name)); + if (status) filtered = filtered.filter((item) => item.status === status); + + filtered.sort((a, b) => a.sort - b.sort); + return ok(filtered); +} + +/** + * 创建部门 + */ +export async function createDept( + data: Partial, +): Promise> { + if (!isMock) return request.post("/dept", data); + + const { departments } = await import("../../mock/data/dept.data"); + const newDept: Department = { + id: String(Date.now()), + name: data.name || "", + parentId: data.parentId || null, + leader: data.leader, + phone: data.phone, + email: data.email, + sort: data.sort || 0, + status: data.status || "enabled", + remark: data.remark, + createTime: new Date().toISOString().replace("T", " ").slice(0, 19), + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + departments.push(newDept); + return ok(newDept, "创建成功"); +} + +/** + * 更新部门 + */ +export async function updateDept( + id: string, + data: Partial, +): Promise> { + if (!isMock) return request.put(`/dept/${id}`, data); + + const { departments } = await import("../../mock/data/dept.data"); + const index = departments.findIndex((item) => item.id === id); + if (index === -1) return error(404, "部门不存在"); + + departments[index] = { + ...departments[index], + ...data, + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + return ok(departments[index], "更新成功"); +} + +/** + * 删除部门 + */ +export async function deleteDept(id: string): Promise> { + if (!isMock) return request.delete(`/dept/${id}`); + + const { departments } = await import("../../mock/data/dept.data"); + const hasChildren = departments.some((item) => item.parentId === id); + if (hasChildren) return error(400, "存在子部门,无法删除"); + + const index = departments.findIndex((item) => item.id === id); + if (index === -1) return error(404, "部门不存在"); + + departments.splice(index, 1); + return ok(undefined as unknown as void, "删除成功"); +} diff --git a/antdv-next-admin/src/api/dict.ts b/antdv-next-admin/src/api/dict.ts new file mode 100644 index 0000000..2e4bc44 --- /dev/null +++ b/antdv-next-admin/src/api/dict.ts @@ -0,0 +1,235 @@ +import type { ApiResponse } from "@/types/api"; +import type { + DictType, + DictData, + DictQueryParams, + DictTypeQueryParams, +} from "@/types/dict"; + +import { request } from "@/utils/request"; + +const isMock = import.meta.env.VITE_USE_MOCK === "true"; + +const ok = (data: T, message = "success"): ApiResponse => ({ + code: 200, + message, + data, + success: true, +}); + +const error = (code: number, message: string): ApiResponse => ({ + code, + message, + data: null as T, + success: false, +}); + +/** + * 获取所有字典类型 + */ +export async function getDictTypes(): Promise> { + if (!isMock) return request.get("/dict/types"); + + const { dictTypes } = await import("../../mock/data/dict.data"); + return ok(dictTypes.filter((t) => t.status === "enabled")); +} + +/** + * 获取字典类型列表(分页) + */ +export async function getDictTypeList(params: DictTypeQueryParams): Promise< + ApiResponse<{ + list: DictType[]; + total: number; + page: number; + pageSize: number; + }> +> { + if (!isMock) return request.get("/dict/type/list", { params }); + + const { dictTypes } = await import("../../mock/data/dict.data"); + const { page = 1, pageSize = 10, code, name, status } = params; + let filtered = [...dictTypes]; + + if (code) filtered = filtered.filter((item) => item.code.includes(code)); + if (name) filtered = filtered.filter((item) => item.name.includes(name)); + if (status) filtered = filtered.filter((item) => item.status === status); + + const start = (page - 1) * pageSize; + const list = filtered.slice(start, start + pageSize); + + return ok({ list, total: filtered.length, page, pageSize }); +} + +/** + * 创建字典类型 + */ +export async function createDictType( + data: Partial, +): Promise> { + if (!isMock) return request.post("/dict/type", data); + + const { dictTypes } = await import("../../mock/data/dict.data"); + const newType: DictType = { + id: String(Date.now()), + name: data.name || "", + code: data.code || "", + description: data.description, + status: data.status || "enabled", + createTime: new Date().toISOString().replace("T", " ").slice(0, 19), + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + dictTypes.push(newType); + return ok(newType, "创建成功"); +} + +/** + * 更新字典类型 + */ +export async function updateDictType( + id: string, + data: Partial, +): Promise> { + if (!isMock) return request.put(`/dict/type/${id}`, data); + + const { dictTypes } = await import("../../mock/data/dict.data"); + const index = dictTypes.findIndex((item) => item.id === id); + if (index === -1) return error(404, "字典类型不存在"); + + dictTypes[index] = { + ...dictTypes[index], + ...data, + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + return ok(dictTypes[index], "更新成功"); +} + +/** + * 删除字典类型 + */ +export async function deleteDictType(id: string): Promise> { + if (!isMock) return request.delete(`/dict/type/${id}`); + + const { dictTypes } = await import("../../mock/data/dict.data"); + const index = dictTypes.findIndex((item) => item.id === id); + if (index === -1) return error(404, "字典类型不存在"); + + dictTypes.splice(index, 1); + return ok(undefined as unknown as void, "删除成功"); +} + +/** + * 获取所有字典数据 + */ +export async function getAllDictData(): Promise> { + if (!isMock) return request.get("/dict/data/all"); + + const { dictData } = await import("../../mock/data/dict.data"); + return ok(dictData); +} + +/** + * 根据类型获取字典数据 + */ +export async function getDictDataByType( + typeCode: string, +): Promise> { + if (!isMock) return request.get(`/dict/data/${typeCode}`); + + const { dictData } = await import("../../mock/data/dict.data"); + const filtered = dictData.filter( + (d) => d.typeCode === typeCode && d.status === "enabled", + ); + filtered.sort((a, b) => a.sort - b.sort); + return ok(filtered); +} + +/** + * 获取字典数据列表(分页) + */ +export async function getDictDataList(params: DictQueryParams): Promise< + ApiResponse<{ + list: DictData[]; + total: number; + page: number; + pageSize: number; + }> +> { + if (!isMock) return request.get("/dict/data/list", { params }); + + const { dictData } = await import("../../mock/data/dict.data"); + const { page = 1, pageSize = 10, typeCode, label, value, status } = params; + let filtered = [...dictData]; + + if (typeCode) + filtered = filtered.filter((item) => item.typeCode === typeCode); + if (label) filtered = filtered.filter((item) => item.label.includes(label)); + if (value) filtered = filtered.filter((item) => item.value.includes(value)); + if (status) filtered = filtered.filter((item) => item.status === status); + + filtered.sort((a, b) => a.sort - b.sort); + + const start = (page - 1) * pageSize; + const list = filtered.slice(start, start + pageSize); + + return ok({ list, total: filtered.length, page, pageSize }); +} + +/** + * 创建字典数据 + */ +export async function createDictData( + data: Partial, +): Promise> { + if (!isMock) return request.post("/dict/data", data); + + const { dictData } = await import("../../mock/data/dict.data"); + const newData: DictData = { + id: String(Date.now()), + typeCode: data.typeCode || "", + label: data.label || "", + value: data.value || "", + sort: data.sort || 0, + status: data.status || "enabled", + remark: data.remark, + createTime: new Date().toISOString().replace("T", " ").slice(0, 19), + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + dictData.push(newData); + return ok(newData, "创建成功"); +} + +/** + * 更新字典数据 + */ +export async function updateDictData( + id: string, + data: Partial, +): Promise> { + if (!isMock) return request.put(`/dict/data/${id}`, data); + + const { dictData } = await import("../../mock/data/dict.data"); + const index = dictData.findIndex((item) => item.id === id); + if (index === -1) return error(404, "字典数据不存在"); + + dictData[index] = { + ...dictData[index], + ...data, + updateTime: new Date().toISOString().replace("T", " ").slice(0, 19), + }; + return ok(dictData[index], "更新成功"); +} + +/** + * 删除字典数据 + */ +export async function deleteDictData(id: string): Promise> { + if (!isMock) return request.delete(`/dict/data/${id}`); + + const { dictData } = await import("../../mock/data/dict.data"); + const index = dictData.findIndex((item) => item.id === id); + if (index === -1) return error(404, "字典数据不存在"); + + dictData.splice(index, 1); + return ok(undefined as unknown as void, "删除成功"); +} diff --git a/antdv-next-admin/src/api/file.ts b/antdv-next-admin/src/api/file.ts new file mode 100644 index 0000000..6bb8ea8 --- /dev/null +++ b/antdv-next-admin/src/api/file.ts @@ -0,0 +1,58 @@ +import type { ApiResponse } from "@/types/api"; +import type { SysFile, SysFileQueryParams } from "@/types/file"; + +import { request } from "@/utils/request"; + +const isMock = import.meta.env.VITE_USE_MOCK === "true"; + +const ok = (data: T, message = "success"): ApiResponse => ({ + code: 200, + message, + data, + success: true, +}); + +const error = (code: number, message: string): ApiResponse => ({ + code, + message, + data: null as T, + success: false, +}); + +export async function getFileList(params: SysFileQueryParams): Promise< + ApiResponse<{ + list: SysFile[]; + total: number; + page: number; + pageSize: number; + }> +> { + if (!isMock) return request.get("/file/list", { params }); + + const { sysFiles } = await import("../../mock/data/file.data"); + const { page = 1, pageSize = 10, name, ext, storage } = params; + let filtered = [...sysFiles]; + + if (name) + filtered = filtered.filter((f) => + f.originalName.toLowerCase().includes(name.toLowerCase()), + ); + if (ext) filtered = filtered.filter((f) => f.ext === ext); + if (storage) filtered = filtered.filter((f) => f.storage === storage); + + const start = (page - 1) * pageSize; + const list = filtered.slice(start, start + pageSize); + + return ok({ list, total: filtered.length, page, pageSize }); +} + +export async function deleteFile(id: string): Promise> { + if (!isMock) return request.delete(`/file/${id}`); + + const { sysFiles } = await import("../../mock/data/file.data"); + const index = sysFiles.findIndex((f) => f.id === id); + if (index === -1) return error(404, "文件不存在"); + + sysFiles.splice(index, 1); + return ok(undefined, "删除成功"); +} diff --git a/antdv-next-admin/src/api/log.ts b/antdv-next-admin/src/api/log.ts new file mode 100644 index 0000000..2a49754 --- /dev/null +++ b/antdv-next-admin/src/api/log.ts @@ -0,0 +1,98 @@ +import type { ApiResponse } from "@/types/api"; +import type { + OperationLog, + LoginLog, + OperationLogQueryParams, + LoginLogQueryParams, +} from "@/types/log"; + +import { request } from "@/utils/request"; + +const isMock = import.meta.env.VITE_USE_MOCK === "true"; + +const ok = (data: T, message = "success"): ApiResponse => ({ + code: 200, + message, + data, + success: true, +}); + +/** + * 获取操作日志列表 + */ +export async function getOperationLogList( + params: OperationLogQueryParams, +): Promise< + ApiResponse<{ + list: OperationLog[]; + total: number; + page: number; + pageSize: number; + }> +> { + if (!isMock) return request.get("/log/operation/list", { params }); + + const { operationLogs } = await import("../../mock/data/log.data"); + const { page = 1, pageSize = 10, username, module, action, status } = params; + let filtered = [...operationLogs]; + + if (username) + filtered = filtered.filter((l) => l.username.includes(username)); + if (module) filtered = filtered.filter((l) => l.module === module); + if (action) filtered = filtered.filter((l) => l.action === action); + if (status) filtered = filtered.filter((l) => l.status === status); + + const start = (page - 1) * pageSize; + const list = filtered.slice(start, start + pageSize); + + return ok({ list, total: filtered.length, page, pageSize }); +} + +/** + * 获取登录日志列表 + */ +export async function getLoginLogList(params: LoginLogQueryParams): Promise< + ApiResponse<{ + list: LoginLog[]; + total: number; + page: number; + pageSize: number; + }> +> { + if (!isMock) return request.get("/log/login/list", { params }); + + const { loginLogs } = await import("../../mock/data/log.data"); + const { page = 1, pageSize = 10, username, status } = params; + let filtered = [...loginLogs]; + + if (username) + filtered = filtered.filter((l) => l.username.includes(username)); + if (status) filtered = filtered.filter((l) => l.status === status); + + const start = (page - 1) * pageSize; + const list = filtered.slice(start, start + pageSize); + + return ok({ list, total: filtered.length, page, pageSize }); +} + +/** + * 清空操作日志 + */ +export async function clearOperationLog(): Promise> { + if (!isMock) return request.delete("/log/operation/clear"); + + const { operationLogs } = await import("../../mock/data/log.data"); + operationLogs.splice(0, operationLogs.length); + return ok(undefined, "清空成功"); +} + +/** + * 清空登录日志 + */ +export async function clearLoginLog(): Promise> { + if (!isMock) return request.delete("/log/login/clear"); + + const { loginLogs } = await import("../../mock/data/log.data"); + loginLogs.splice(0, loginLogs.length); + return ok(undefined, "清空成功"); +} diff --git a/antdv-next-admin/src/api/permission.ts b/antdv-next-admin/src/api/permission.ts new file mode 100644 index 0000000..5ea1a83 --- /dev/null +++ b/antdv-next-admin/src/api/permission.ts @@ -0,0 +1,158 @@ +import type { ApiResponse } from "@/types/api"; +import type { Permission } from "@/types/auth"; + +import { request } from "@/utils/request"; + +const isMock = import.meta.env.VITE_USE_MOCK === "true"; + +const ok = (data: T, message = "Success"): ApiResponse => ({ + code: 200, + message, + data, + success: true, +}); + +const notFound = (message = "Not found"): ApiResponse => ({ + code: 404, + message, + data: null as T, + success: false, +}); + +/** + * Get permission list + */ +export async function getPermissionList( + params?: Record, +): Promise> { + if (!isMock) return request.get("/permissions", { params }); + + const { mockPermissions } = await import("../../mock/data/permissions.data"); + return ok(mockPermissions); +} + +/** + * Get permission tree + */ +export async function getPermissionTree(): Promise> { + if (!isMock) return request.get("/permissions/tree"); + + const { mockPermissions } = await import("../../mock/data/permissions.data"); + return ok(mockPermissions); +} + +/** + * Get permission by ID + */ +export async function getPermissionById( + id: string, +): Promise> { + if (!isMock) return request.get(`/permissions/${id}`); + + const { mockPermissions } = await import("../../mock/data/permissions.data"); + + const find = (list: Permission[]): Permission | undefined => { + for (const p of list) { + if (p.id === id) return p; + if (p.children?.length) { + const hit = find(p.children as Permission[]); + if (hit) return hit; + } + } + return undefined; + }; + + const perm = find(mockPermissions); + if (!perm) return notFound("Permission not found"); + return ok(perm); +} + +/** + * Create permission + */ +export async function createPermission( + data: Partial, +): Promise> { + if (!isMock) return request.post("/permissions", data); + + const { mockPermissions } = await import("../../mock/data/permissions.data"); + const nowId = String(Date.now()); + const perm: Permission = { + id: nowId, + name: data.name || "New Permission", + code: data.code || `perm_${nowId}`, + description: data.description || "", + resource: data.resource || "", + action: data.action || "view", + type: (data.type as Permission["type"]) || "api", + }; + + mockPermissions.unshift(perm); + return ok(perm, "Permission created successfully"); +} + +/** + * Update permission + */ +export async function updatePermission( + id: string, + data: Partial, +): Promise> { + if (!isMock) return request.put(`/permissions/${id}`, data); + + const { mockPermissions } = await import("../../mock/data/permissions.data"); + + const updateRec = (list: Permission[]): Permission | undefined => { + for (let i = 0; i < list.length; i++) { + const p = list[i]; + if (p.id === id) { + list[i] = { ...p, ...data } as Permission; + return list[i]; + } + if (p.children?.length) { + const hit = updateRec(p.children as Permission[]); + if (hit) return hit; + } + } + return undefined; + }; + + const updated = updateRec(mockPermissions); + if (!updated) return notFound("Permission not found"); + return ok(updated, "Permission updated successfully"); +} + +/** + * Delete permission + */ +export async function deletePermission(id: string): Promise> { + if (!isMock) return request.delete(`/permissions/${id}`); + + const { mockPermissions } = await import("../../mock/data/permissions.data"); + + const deleteRec = (list: Permission[]): boolean => { + const idx = list.findIndex((p) => p.id === id); + if (idx !== -1) { + list.splice(idx, 1); + return true; + } + for (const p of list) { + if (p.children?.length && deleteRec(p.children as Permission[])) + return true; + } + return false; + }; + + if (!deleteRec(mockPermissions)) return notFound("Permission not found"); + return ok(null, "Permission deleted successfully"); +} + +/** + * Get permissions for current user + */ +export async function getUserPermissions(): Promise> { + if (!isMock) return request.get("/permissions/user"); + + const { mockPermissions } = await import("../../mock/data/permissions.data"); + return ok(mockPermissions); +} diff --git a/antdv-next-admin/src/api/role.ts b/antdv-next-admin/src/api/role.ts new file mode 100644 index 0000000..000f30c --- /dev/null +++ b/antdv-next-admin/src/api/role.ts @@ -0,0 +1,125 @@ +import type { ApiResponse, PageParams, PageResult } from "@/types/api"; +import type { Role } from "@/types/auth"; + +import { request } from "@/utils/request"; + +const isMock = import.meta.env.VITE_USE_MOCK === "true"; + +const ok = (data: T, message = "Success"): ApiResponse => ({ + code: 200, + message, + data, + success: true, +}); + +const notFound = (message = "Not found"): ApiResponse => ({ + code: 404, + message, + data: null as T, + success: false, +}); + +/** + * Get role list + */ +export async function getRoleList( + params: PageParams, +): Promise>> { + if (!isMock) return request.get("/roles", { params }); + + const { mockRoles } = await import("../../mock/data/roles.data"); + const { + current = 1, + pageSize = 10, + name, + code, + } = (params || {}) as Record; + + let filtered = [...mockRoles]; + if (name) + filtered = filtered.filter((r) => + r.name?.toLowerCase().includes(String(name).toLowerCase()), + ); + if (code) + filtered = filtered.filter((r) => + r.code?.toLowerCase().includes(String(code).toLowerCase()), + ); + + const cur = Number(current) || 1; + const size = Number(pageSize) || 10; + const start = (cur - 1) * size; + const list = filtered.slice(start, start + size); + + return ok({ list, total: filtered.length, current: cur, pageSize: size }); +} + +/** + * Get role by ID + */ +export async function getRoleById(id: string): Promise> { + if (!isMock) return request.get(`/roles/${id}`); + + const { mockRoles } = await import("../../mock/data/roles.data"); + const role = mockRoles.find((r) => r.id === id); + if (!role) return notFound("Role not found"); + return ok(role); +} + +/** + * Create role + */ +export async function createRole( + data: Partial, +): Promise> { + if (!isMock) return request.post("/roles", data); + + const { mockRoles } = await import("../../mock/data/roles.data"); + const now = new Date().toISOString(); + const newRole: Role = { + id: String(Date.now()), + name: data.name || "New Role", + code: data.code || `role_${Date.now()}`, + description: data.description || "", + permissions: data.permissions || [], + createdAt: now, + updatedAt: now, + }; + + mockRoles.unshift(newRole); + return ok(newRole, "Role created successfully"); +} + +/** + * Update role + */ +export async function updateRole( + id: string, + data: Partial, +): Promise> { + if (!isMock) return request.put(`/roles/${id}`, data); + + const { mockRoles } = await import("../../mock/data/roles.data"); + const idx = mockRoles.findIndex((r) => r.id === id); + if (idx === -1) return notFound("Role not found"); + + mockRoles[idx] = { + ...mockRoles[idx], + ...data, + updatedAt: new Date().toISOString(), + } as Role; + return ok(mockRoles[idx], "Role updated successfully"); +} + +/** + * Delete role + */ +export async function deleteRole(id: string): Promise> { + if (!isMock) return request.delete(`/roles/${id}`); + + const { mockRoles } = await import("../../mock/data/roles.data"); + const idx = mockRoles.findIndex((r) => r.id === id); + if (idx === -1) return notFound("Role not found"); + + mockRoles.splice(idx, 1); + return ok(null, "Role deleted successfully"); +} diff --git a/antdv-next-admin/src/api/user.ts b/antdv-next-admin/src/api/user.ts new file mode 100644 index 0000000..b2c6e63 --- /dev/null +++ b/antdv-next-admin/src/api/user.ts @@ -0,0 +1,216 @@ +import type { ApiResponse, PageParams, PageResult } from "@/types/api"; +import type { User } from "@/types/auth"; + +import { request } from "@/utils/request"; + +const isMock = import.meta.env.VITE_USE_MOCK === "true"; + +const ok = (data: T, message = "Success"): ApiResponse => ({ + code: 200, + message, + data, + success: true, +}); + +const notFound = (message = "Not found"): ApiResponse => ({ + code: 404, + message, + data: null as T, + success: false, +}); + +/** + * Get user list + */ +export async function getUserList( + params: PageParams, +): Promise>> { + if (!isMock) return request.get("/users", { params }); + + const { mockUsers } = await import("../../mock/data/users.data"); + + const { + current = 1, + pageSize = 10, + username, + email, + status, + gender, + } = params || {}; + + let filtered = [...mockUsers]; + if (username) + filtered = filtered.filter((u) => + u.username?.toLowerCase().includes(String(username).toLowerCase()), + ); + if (email) + filtered = filtered.filter((u) => + u.email?.toLowerCase().includes(String(email).toLowerCase()), + ); + if (gender) { + const genderValues = Array.isArray(gender) + ? gender.map((item) => String(item)) + : String(gender) + .split(",") + .map((item) => item.trim()) + .filter(Boolean); + if (genderValues.length > 0) { + filtered = filtered.filter((u) => + genderValues.includes(String(u.gender)), + ); + } + } + if (status) filtered = filtered.filter((u) => u.status === status); + + const cur = Number(current) || 1; + const size = Number(pageSize) || 10; + const start = (cur - 1) * size; + const list = filtered.slice(start, start + size); + + return ok({ + list, + total: filtered.length, + current: cur, + pageSize: size, + }); +} + +/** + * Get user by ID + */ +export async function getUserById(id: string): Promise> { + if (!isMock) return request.get(`/users/${id}`); + + const { mockUsers, adminUser } = await import("../../mock/data/users.data"); + const user = (id === "1" ? adminUser : mockUsers.find((u) => u.id === id)) as + | User + | undefined; + if (!user) return notFound("User not found"); + return ok(user); +} + +/** + * Create user + */ +export async function createUser( + data: Partial, +): Promise> { + if (!isMock) return request.post("/users", data); + + const { mockUsers } = await import("../../mock/data/users.data"); + const { faker } = await import("@faker-js/faker"); + + const now = new Date().toISOString(); + const newUser: User = { + id: faker.string.uuid(), + username: data.username || faker.internet.username(), + email: data.email || faker.internet.email(), + realName: data.realName || faker.person.fullName(), + avatar: data.avatar || faker.image.avatar(), + phone: data.phone || `1${faker.string.numeric(10)}`, + gender: (data.gender as User["gender"]) || "male", + birthDate: data.birthDate || "1990-01-01", + bio: data.bio || "", + status: (data.status as User["status"]) || "active", + createdAt: now, + updatedAt: now, + roles: data.roles || [], + permissions: data.permissions || [], + }; + + mockUsers.unshift(newUser); + return ok(newUser, "User created successfully"); +} + +/** + * Update user + */ +export async function updateUser( + id: string, + data: Partial, +): Promise> { + if (!isMock) return request.put(`/users/${id}`, data); + + const { mockUsers, adminUser } = await import("../../mock/data/users.data"); + const now = new Date().toISOString(); + + if (id === "1") { + Object.assign(adminUser, data, { updatedAt: now }); + return ok(adminUser, "User updated successfully"); + } + + const idx = mockUsers.findIndex((u) => u.id === id); + if (idx === -1) return notFound("User not found"); + + mockUsers[idx] = { ...mockUsers[idx], ...data, updatedAt: now } as User; + return ok(mockUsers[idx], "User updated successfully"); +} + +/** + * Delete user + */ +export async function deleteUser(id: string): Promise> { + if (!isMock) return request.delete(`/users/${id}`); + + if (id === "1") + return { + code: 400, + message: "Cannot delete admin user", + data: null, + success: false, + }; + + const { mockUsers } = await import("../../mock/data/users.data"); + const idx = mockUsers.findIndex((u) => u.id === id); + if (idx === -1) return notFound("User not found"); + + mockUsers.splice(idx, 1); + return ok(null, "User deleted successfully"); +} + +/** + * Change password + */ +export interface ChangePasswordParams { + oldPassword: string; + newPassword: string; +} + +export async function changePassword( + params: ChangePasswordParams, +): Promise> { + if (!isMock) return request.post("/users/change-password", params); + + // Mock implementation + const { oldPassword, newPassword } = params; + + // Simple validation + if (!oldPassword || !newPassword) { + return { + code: 400, + message: "Password cannot be empty", + data: null, + success: false, + }; + } + + if (oldPassword !== "123456") { + return { + code: 400, + message: "Current password is incorrect", + data: null, + success: false, + }; + } + + if (newPassword.length < 6) { + return { + code: 400, + message: "Password must be at least 6 characters", + data: null, + success: false, + }; + } + + return ok(null, "Password changed successfully"); +} diff --git a/antdv-next-admin/src/assets/images/avatar.png b/antdv-next-admin/src/assets/images/avatar.png new file mode 100644 index 0000000..1ab640e Binary files /dev/null and b/antdv-next-admin/src/assets/images/avatar.png differ diff --git a/antdv-next-admin/src/assets/images/logo.png b/antdv-next-admin/src/assets/images/logo.png new file mode 100644 index 0000000..3420482 Binary files /dev/null and b/antdv-next-admin/src/assets/images/logo.png differ diff --git a/antdv-next-admin/src/assets/styles/animations.css b/antdv-next-admin/src/assets/styles/animations.css new file mode 100644 index 0000000..79a30e3 --- /dev/null +++ b/antdv-next-admin/src/assets/styles/animations.css @@ -0,0 +1,313 @@ +/* Animation Utilities */ + +/* ========== Page Transition Animations ========== */ + +/* Fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity var(--duration-slow) var(--ease-in-out); +} +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} + +/* Slide Left */ +.slide-left-enter-active, +.slide-left-leave-active { + transition: all var(--duration-slow) var(--ease-in-out); +} +.slide-left-enter-from { + transform: translateX(30px); + opacity: 0; +} +.slide-left-leave-to { + transform: translateX(-30px); + opacity: 0; +} + +/* Slide Right */ +.slide-right-enter-active, +.slide-right-leave-active { + transition: all var(--duration-slow) var(--ease-in-out); +} +.slide-right-enter-from { + transform: translateX(-30px); + opacity: 0; +} +.slide-right-leave-to { + transform: translateX(30px); + opacity: 0; +} + +/* Slide Up */ +.slide-up-enter-active, +.slide-up-leave-active { + transition: all var(--duration-slow) var(--ease-in-out); +} +.slide-up-enter-from { + transform: translateY(24px); + opacity: 0; +} +.slide-up-leave-to { + transform: translateY(-24px); + opacity: 0; +} + +/* Slide Down */ +.slide-down-enter-active, +.slide-down-leave-active { + transition: all var(--duration-slow) var(--ease-in-out); +} +.slide-down-enter-from { + transform: translateY(-24px); + opacity: 0; +} +.slide-down-leave-to { + transform: translateY(24px); + opacity: 0; +} + +/* Zoom */ +.zoom-enter-active, +.zoom-leave-active { + transition: all var(--duration-slow) var(--ease-out-back); +} +.zoom-enter-from, +.zoom-leave-to { + transform: scale(0.95); + opacity: 0; +} + +/* Zoom Big */ +.zoom-big-enter-active, +.zoom-big-leave-active { + transition: all var(--duration-slow) var(--ease-out-back); +} +.zoom-big-enter-from { + transform: scale(0.8); + opacity: 0; +} +.zoom-big-leave-to { + transform: scale(1.1); + opacity: 0; +} + +/* ========== Keyframe Animations ========== */ + +/* Spin */ +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +.loading-spin { + animation: spin 1s linear infinite; +} + +/* Skeleton Loading */ +@keyframes skeleton-loading { + 0% { + background-position: 100% 50%; + } + 100% { + background-position: 0 50%; + } +} + +.skeleton { + background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 37%, #f0f0f0 63%); + background-size: 400% 100%; + animation: skeleton-loading 1.4s ease infinite; +} + +:root.dark .skeleton { + background: linear-gradient(90deg, #2a2a2a 25%, #1f1f1f 37%, #2a2a2a 63%); + background-size: 400% 100%; +} + +/* Bounce In */ +@keyframes bounce-in { + 0% { + transform: scale(0); + opacity: 0; + } + 50% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +.bounce-in { + animation: bounce-in var(--duration-slow) var(--ease-out-back); +} + +/* Shake */ +@keyframes shake { + 0%, + 100% { + transform: translateX(0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + transform: translateX(-10px); + } + 20%, + 40%, + 60%, + 80% { + transform: translateX(10px); + } +} + +.shake { + animation: shake 0.5s; +} + +/* Pulse */ +@keyframes pulse { + 0% { + box-shadow: 0 0 0 0 rgba(24, 144, 255, 0.7); + } + 70% { + box-shadow: 0 0 0 10px rgba(24, 144, 255, 0); + } + 100% { + box-shadow: 0 0 0 0 rgba(24, 144, 255, 0); + } +} + +.pulse { + animation: pulse 2s infinite; +} + +/* Ripple Effect */ +@keyframes ripple { + to { + transform: scale(4); + opacity: 0; + } +} + +/* Slide Down */ +@keyframes slide-down { + from { + transform: translateY(-20px); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +.slide-down { + animation: slide-down var(--duration-slow) var(--ease-out); +} + +/* Slide Up */ +@keyframes slide-up { + from { + transform: translateY(20px); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +.slide-up { + animation: slide-up var(--duration-slow) var(--ease-out); +} + +/* Fade In Down */ +@keyframes fade-in-down { + from { + transform: translateY(-10px); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +.fade-in-down { + animation: fade-in-down var(--duration-slow) var(--ease-out); +} + +/* Fade In Up */ +@keyframes fade-in-up { + from { + transform: translateY(10px); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +.fade-in-up { + animation: fade-in-up var(--duration-slow) var(--ease-out); +} + +/* ========== Utility Classes ========== */ + +/* Card Hover Effect */ +.card-hover { + transition: all var(--duration-slow) var(--ease-out); + cursor: pointer; +} + +.card-hover:hover { + transform: translateY(-4px); + box-shadow: var(--shadow-card-hover); +} + +/* Button Hover Effect */ +.btn-hover { + transition: all var(--duration-base) var(--ease-out); +} + +.btn-hover:hover:not(:disabled) { + transform: translateY(-2px); + box-shadow: var(--shadow-card-hover); +} + +.btn-hover:active:not(:disabled) { + transform: translateY(0); +} + +/* Ripple Effect Container */ +.ripple-effect { + position: relative; + overflow: hidden; +} + +.ripple-effect::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + border-radius: 50%; + background: rgba(255, 255, 255, 0.5); + transform: translate(-50%, -50%); + opacity: 0; +} + +.ripple-effect:active::after { + width: 20px; + height: 20px; + animation: ripple 0.6s ease-out; +} diff --git a/antdv-next-admin/src/assets/styles/global.css b/antdv-next-admin/src/assets/styles/global.css new file mode 100644 index 0000000..bc04aee --- /dev/null +++ b/antdv-next-admin/src/assets/styles/global.css @@ -0,0 +1,585 @@ +/* Global Styles */ + +/* ========== CSS Reset ========== */ + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; +} + +/* ========== Theme Transition ========== */ + +html.theme-transition, +html.theme-transition *, +html.theme-transition *::before, +html.theme-transition *::after { + transition-property: color, background-color, border-color, box-shadow, fill, stroke; + transition-duration: 0.46s; + transition-timing-function: var(--ease-in-out); +} + +/* 确保表格元素在 View Transition 期间不会创建独立的层叠上下文 */ +html.theme-view-transition .ant-table-wrapper, +html.theme-view-transition .ant-table, +html.theme-view-transition .ant-table-container, +html.theme-view-transition .ant-table-content, +html.theme-view-transition .ant-table-sticky-holder { + contain: none !important; + isolation: auto !important; +} + +@media (prefers-reduced-motion: reduce) { + html.theme-transition, + html.theme-transition *, + html.theme-transition *::before, + html.theme-transition *::after { + transition: none !important; + } + + html.theme-view-transition::view-transition-old(root), + html.theme-view-transition::view-transition-new(root) { + animation: none !important; + } +} + +html.theme-view-transition::view-transition-old(root), +html.theme-view-transition::view-transition-new(root) { + mix-blend-mode: normal; + will-change: clip-path; +} + +html.theme-view-transition::view-transition-old(root) { + animation: none; + z-index: 1; +} + +html.theme-view-transition::view-transition-new(root) { + animation: theme-clip-reveal 0.74s cubic-bezier(0.22, 1, 0.36, 1) forwards; + z-index: 9999; +} + +html.theme-view-transition.dark::view-transition-old(root) { + animation: theme-clip-conceal 0.74s cubic-bezier(0.16, 1, 0.3, 1) forwards; + z-index: 9999; +} + +html.theme-view-transition.dark::view-transition-new(root) { + animation: none; + z-index: 1; +} + +@keyframes theme-clip-reveal { + from { + clip-path: circle(0 at var(--theme-transition-x) var(--theme-transition-y)); + } + to { + clip-path: circle( + var(--theme-transition-radius) at var(--theme-transition-x) var(--theme-transition-y) + ); + } +} + +@keyframes theme-clip-conceal { + from { + clip-path: circle( + var(--theme-transition-radius) at var(--theme-transition-x) var(--theme-transition-y) + ); + } + to { + clip-path: circle(0 at var(--theme-transition-x) var(--theme-transition-y)); + } +} + +body { + margin: 0; + padding: 0; + font-family: var(--font-family); + font-size: var(--font-size-sm); + line-height: var(--line-height-base); + color: var(--color-text-primary); + background-color: var(--color-bg-layout); +} + +/* ========== Typography ========== */ + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + font-weight: var(--font-weight-semibold); + line-height: var(--line-height-tight); + color: var(--color-text-primary); +} + +h1 { + font-size: var(--font-size-4xl); +} +h2 { + font-size: var(--font-size-3xl); +} +h3 { + font-size: var(--font-size-2xl); +} +h4 { + font-size: var(--font-size-xl); +} +h5 { + font-size: var(--font-size-lg); +} +h6 { + font-size: var(--font-size-base); +} + +p { + margin: 0; + line-height: var(--line-height-base); +} + +a { + color: var(--color-primary); + text-decoration: none; + transition: color var(--duration-base); +} + +a:hover { + color: var(--color-primary-5); +} + +/* ========== Lists ========== */ + +ul, +ol { + list-style: none; + margin: 0; + padding: 0; +} + +/* ========== Scrollbar ========== */ + +/* For Webkit browsers */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: var(--color-bg-layout); +} + +::-webkit-scrollbar-thumb { + background: var(--color-border); + border-radius: var(--radius-sm); +} + +::-webkit-scrollbar-thumb:hover { + background: var(--color-border); + opacity: 0.8; +} + +/* For Firefox */ +* { + scrollbar-width: thin; + scrollbar-color: var(--color-border) var(--color-bg-layout); +} + +/* ========== Utility Classes ========== */ + +/* Text Alignment */ +.text-left { + text-align: left; +} +.text-center { + text-align: center; +} +.text-right { + text-align: right; +} + +/* Text Colors */ +.text-primary { + color: var(--color-text-primary); +} +.text-secondary { + color: var(--color-text-secondary); +} +.text-tertiary { + color: var(--color-text-tertiary); +} +.text-success { + color: var(--color-success); +} +.text-warning { + color: var(--color-warning); +} +.text-error { + color: var(--color-error); +} +.text-info { + color: var(--color-info); +} + +/* Font Weights */ +.font-normal { + font-weight: var(--font-weight-normal); +} +.font-medium { + font-weight: var(--font-weight-medium); +} +.font-semibold { + font-weight: var(--font-weight-semibold); +} +.font-bold { + font-weight: var(--font-weight-bold); +} + +/* Display */ +.block { + display: block; +} +.inline-block { + display: inline-block; +} +.inline { + display: inline; +} +.flex { + display: flex; +} +.inline-flex { + display: inline-flex; +} +.grid { + display: grid; +} +.hidden { + display: none; +} + +/* Flex Utilities */ +.flex-row { + flex-direction: row; +} +.flex-column { + flex-direction: column; +} +.flex-wrap { + flex-wrap: wrap; +} +.flex-nowrap { + flex-wrap: nowrap; +} +.justify-start { + justify-content: flex-start; +} +.justify-end { + justify-content: flex-end; +} +.justify-center { + justify-content: center; +} +.justify-between { + justify-content: space-between; +} +.justify-around { + justify-content: space-around; +} +.items-start { + align-items: flex-start; +} +.items-end { + align-items: flex-end; +} +.items-center { + align-items: center; +} +.items-baseline { + align-items: baseline; +} +.items-stretch { + align-items: stretch; +} +.flex-1 { + flex: 1; +} + +/* Spacing */ +.m-0 { + margin: 0; +} +.mt-0 { + margin-top: 0; +} +.mr-0 { + margin-right: 0; +} +.mb-0 { + margin-bottom: 0; +} +.ml-0 { + margin-left: 0; +} + +.p-0 { + padding: 0; +} +.pt-0 { + padding-top: 0; +} +.pr-0 { + padding-right: 0; +} +.pb-0 { + padding-bottom: 0; +} +.pl-0 { + padding-left: 0; +} + +/* Margin Spacing */ +.m-xs { + margin: var(--spacing-xs); +} +.m-sm { + margin: var(--spacing-sm); +} +.m-md { + margin: var(--spacing-md); +} +.m-lg { + margin: var(--spacing-lg); +} +.m-xl { + margin: var(--spacing-xl); +} + +.mt-xs { + margin-top: var(--spacing-xs); +} +.mt-sm { + margin-top: var(--spacing-sm); +} +.mt-md { + margin-top: var(--spacing-md); +} +.mt-lg { + margin-top: var(--spacing-lg); +} +.mt-xl { + margin-top: var(--spacing-xl); +} + +.mb-xs { + margin-bottom: var(--spacing-xs); +} +.mb-sm { + margin-bottom: var(--spacing-sm); +} +.mb-md { + margin-bottom: var(--spacing-md); +} +.mb-lg { + margin-bottom: var(--spacing-lg); +} +.mb-xl { + margin-bottom: var(--spacing-xl); +} + +/* Padding Spacing */ +.p-xs { + padding: var(--spacing-xs); +} +.p-sm { + padding: var(--spacing-sm); +} +.p-md { + padding: var(--spacing-md); +} +.p-lg { + padding: var(--spacing-lg); +} +.p-xl { + padding: var(--spacing-xl); +} + +/* Width */ +.w-full { + width: 100%; +} +.w-auto { + width: auto; +} + +/* Height */ +.h-full { + height: 100%; +} +.h-auto { + height: auto; +} +.h-screen { + height: 100vh; +} + +/* Border Radius */ +.rounded-none { + border-radius: 0; +} +.rounded-sm { + border-radius: var(--radius-sm); +} +.rounded { + border-radius: var(--radius-base); +} +.rounded-lg { + border-radius: var(--radius-lg); +} +.rounded-full { + border-radius: var(--radius-full); +} + +/* Cursor */ +.cursor-pointer { + cursor: pointer; +} +.cursor-default { + cursor: default; +} +.cursor-not-allowed { + cursor: not-allowed; +} + +/* Position */ +.relative { + position: relative; +} +.absolute { + position: absolute; +} +.fixed { + position: fixed; +} +.sticky { + position: sticky; +} + +/* Overflow */ +.overflow-auto { + overflow: auto; +} +.overflow-hidden { + overflow: hidden; +} +.overflow-visible { + overflow: visible; +} +.overflow-scroll { + overflow: scroll; +} + +/* Transitions */ +.transition-all { + transition: all var(--duration-base) var(--ease-out); +} + +.transition-colors { + transition: + color var(--duration-base) var(--ease-out), + background-color var(--duration-base) var(--ease-out), + border-color var(--duration-base) var(--ease-out); +} + +.transition-transform { + transition: transform var(--duration-base) var(--ease-out); +} + +/* ========== Card Component ========== */ + +.card { + background: var(--color-bg-container); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-card); + border: 1px solid var(--color-border-secondary); + padding: var(--spacing-lg); + transition: all var(--duration-slow) var(--ease-out); +} + +.card:hover { + box-shadow: var(--shadow-card-hover); +} + +/* ========== Page Container ========== */ + +.page-container { + box-sizing: border-box; + padding: 0; + min-height: 100%; +} + +.page-header { + margin-bottom: var(--spacing-lg); +} + +.page-title { + font-size: var(--font-size-2xl); + font-weight: var(--font-weight-semibold); + color: var(--color-text-primary); + margin-bottom: var(--spacing-sm); +} + +.page-description { + font-size: var(--font-size-sm); + color: var(--color-text-secondary); +} + +/* ========== Loading States ========== */ + +.loading-container { + display: flex; + align-items: center; + justify-content: center; + min-height: 200px; +} + +/* ========== Empty States ========== */ + +.empty-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: var(--spacing-3xl) var(--spacing-lg); + color: var(--color-text-tertiary); +} + +.empty-icon { + font-size: 64px; + margin-bottom: var(--spacing-md); +} + +.empty-text { + font-size: var(--font-size-base); +} + +/* ========== Responsive ========== */ + +@media (max-width: 768px) { + .page-container { + padding: 0; + } + + .card { + padding: var(--spacing-md); + } +} diff --git a/antdv-next-admin/src/assets/styles/tailwind.css b/antdv-next-admin/src/assets/styles/tailwind.css new file mode 100644 index 0000000..6dedc65 --- /dev/null +++ b/antdv-next-admin/src/assets/styles/tailwind.css @@ -0,0 +1,16 @@ +@layer theme, base, antd, components, utilities; + +@import 'tailwindcss'; + +@theme { + --color-primary: var(--color-primary); + --color-text-primary: var(--color-text-primary); + --color-text-secondary: var(--color-text-secondary); + --color-bg-container: var(--color-bg-container); + --color-bg-layout: var(--color-bg-layout); + --color-border: var(--color-border); + --color-success: var(--color-success); + --color-warning: var(--color-warning); + --color-error: var(--color-error); + --color-info: var(--color-info); +} \ No newline at end of file diff --git a/antdv-next-admin/src/assets/styles/variables.css b/antdv-next-admin/src/assets/styles/variables.css new file mode 100644 index 0000000..c3f315c --- /dev/null +++ b/antdv-next-admin/src/assets/styles/variables.css @@ -0,0 +1,249 @@ +/* CSS Variables - Design Tokens */ + +:root { + /* ========== Typography ========== */ + --font-family: + 'Inter', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', -apple-system, + BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-family-number: + 'DIN Alternate', 'Bahnschrift', 'Inter', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif; + + --font-family-code: + 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace; + + /* Font Sizes */ + --font-size-xs: 12px; + --font-size-sm: 14px; + --font-size-base: 16px; + --font-size-lg: 18px; + --font-size-xl: 20px; + --font-size-2xl: 24px; + --font-size-3xl: 30px; + --font-size-4xl: 38px; + + /* Line Heights */ + --line-height-base: 1.5715; + --line-height-tight: 1.3; + --line-height-relaxed: 1.8; + + /* Font Weights */ + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + + /* ========== Spacing ========== */ + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 16px; + --spacing-lg: 24px; + --spacing-xl: 32px; + --spacing-2xl: 48px; + --spacing-3xl: 64px; + + /* ========== Border Radius ========== */ + --radius-xs: 2px; + --radius-sm: 4px; + --radius-base: 8px; + --radius-lg: 14px; + --radius-xl: 20px; + --radius-full: 9999px; + + /* ========== Animation Duration ========== */ + --duration-fast: 0.1s; + --duration-base: 0.2s; + --duration-slow: 0.3s; + --duration-slower: 0.5s; + + /* ========== Easing Functions ========== */ + --ease-in: cubic-bezier(0.55, 0.055, 0.675, 0.19); + --ease-out: cubic-bezier(0.215, 0.61, 0.355, 1); + --ease-in-out: cubic-bezier(0.645, 0.045, 0.355, 1); + --ease-out-back: cubic-bezier(0.12, 0.4, 0.29, 1.46); + --ease-in-back: cubic-bezier(0.71, -0.46, 0.88, 0.6); + --ease-in-out-back: cubic-bezier(0.71, -0.46, 0.29, 1.46); + + /* ========== Shadows (Diffused, Professional) ========== */ + --shadow-1: 0 1px 2px rgba(15, 23, 42, 0.04), 0 8px 24px rgba(15, 23, 42, 0.04); + + --shadow-2: 0 6px 20px rgba(15, 23, 42, 0.06); + + --shadow-3: 0 12px 36px rgba(15, 23, 42, 0.08); + + --shadow-card: 0 6px 24px rgba(15, 23, 42, 0.06); + --shadow-card-hover: 0 10px 32px rgba(15, 23, 42, 0.12); + --shadow-drawer: 0 8px 40px 0 rgba(0, 0, 0, 0.12); + --shadow-modal: 0 12px 48px 0 rgba(0, 0, 0, 0.15); + + /* ========== Functional Colors ========== */ + --color-success: #52c41a; + --color-success-bg: #f6ffed; + --color-success-border: #b7eb8f; + + --color-warning: #faad14; + --color-warning-bg: #fffbe6; + --color-warning-border: #ffe58f; + + --color-error: #ff4d4f; + --color-error-bg: #fff2f0; + --color-error-border: #ffccc7; + + --color-info: #1890ff; + --color-info-bg: #e6f7ff; + --color-info-border: #91d5ff; + + /* ========== Neutral Colors (Light Mode) ========== */ + --color-text-primary: rgba(0, 0, 0, 0.85); + --color-text-secondary: rgba(0, 0, 0, 0.65); + --color-text-tertiary: rgba(0, 0, 0, 0.45); + --color-text-quaternary: rgba(0, 0, 0, 0.25); + + --color-border: #d9d9d9; + --color-border-secondary: #f0f0f0; + + --color-bg-container: #ffffff; + --color-bg-layout: #f5f7fa; + --color-bg-mask: rgba(0, 0, 0, 0.45); + + /* Fill colors */ + --color-fill-quaternary: #fafafa; + + /* ========== Z-Index ========== */ + --z-index-dropdown: 1050; + --z-index-modal: 1060; + --z-index-drawer: 1070; + --z-index-notification: 1080; + + /* ========== Primary Colors (Default: Blue) ========== */ + /* Provide defaults so styles work even before JS sets data-primary-color */ + --color-primary-1: #e6f7ff; + --color-primary-2: #bae7ff; + --color-primary-3: #91d5ff; + --color-primary-4: #69c0ff; + --color-primary-5: #40a9ff; + --color-primary-6: #1890ff; + --color-primary-7: #096dd9; + --color-primary-8: #0050b3; + --color-primary-9: #003a8c; + --color-primary-10: #002766; + --color-primary: var(--color-primary-6); +} + +/* ========== Primary Color Themes ========== */ + +/* Blue Theme (Default) */ +:root[data-primary-color='blue'] { + --color-primary-1: #e6f7ff; + --color-primary-2: #bae7ff; + --color-primary-3: #91d5ff; + --color-primary-4: #69c0ff; + --color-primary-5: #40a9ff; + --color-primary-6: #1890ff; + --color-primary-7: #096dd9; + --color-primary-8: #0050b3; + --color-primary-9: #003a8c; + --color-primary-10: #002766; + --color-primary: var(--color-primary-6); +} + +/* Green Theme */ +:root[data-primary-color='green'] { + --color-primary-1: #f6ffed; + --color-primary-2: #d9f7be; + --color-primary-3: #b7eb8f; + --color-primary-4: #95de64; + --color-primary-5: #73d13d; + --color-primary-6: #52c41a; + --color-primary-7: #389e0d; + --color-primary-8: #237804; + --color-primary-9: #135200; + --color-primary-10: #092b00; + --color-primary: var(--color-primary-6); +} + +/* Purple Theme */ +:root[data-primary-color='purple'] { + --color-primary-1: #f9f0ff; + --color-primary-2: #efdbff; + --color-primary-3: #d3adf7; + --color-primary-4: #b37feb; + --color-primary-5: #9254de; + --color-primary-6: #722ed1; + --color-primary-7: #531dab; + --color-primary-8: #391085; + --color-primary-9: #22075e; + --color-primary-10: #120338; + --color-primary: var(--color-primary-6); +} + +/* Red Theme */ +:root[data-primary-color='red'] { + --color-primary-1: #fff1f0; + --color-primary-2: #ffccc7; + --color-primary-3: #ffa39e; + --color-primary-4: #ff7875; + --color-primary-5: #ff4d4f; + --color-primary-6: #f5222d; + --color-primary-7: #cf1322; + --color-primary-8: #a8071a; + --color-primary-9: #820014; + --color-primary-10: #5c0011; + --color-primary: var(--color-primary-6); +} + +/* Orange Theme */ +:root[data-primary-color='orange'] { + --color-primary-1: #fff7e6; + --color-primary-2: #ffe7ba; + --color-primary-3: #ffd591; + --color-primary-4: #ffc069; + --color-primary-5: #ffa940; + --color-primary-6: #fa8c16; + --color-primary-7: #d46b08; + --color-primary-8: #ad4e00; + --color-primary-9: #873800; + --color-primary-10: #612500; + --color-primary: var(--color-primary-6); +} + +/* Cyan Theme */ +:root[data-primary-color='cyan'] { + --color-primary-1: #e6fffb; + --color-primary-2: #b5f5ec; + --color-primary-3: #87e8de; + --color-primary-4: #5cdbd3; + --color-primary-5: #36cfc9; + --color-primary-6: #13c2c2; + --color-primary-7: #08979c; + --color-primary-8: #006d75; + --color-primary-9: #00474f; + --color-primary-10: #002329; + --color-primary: var(--color-primary-6); +} + +/* ========== Dark Mode ========== */ +:root.dark { + --color-text-primary: rgba(255, 255, 255, 0.85); + --color-text-secondary: rgba(255, 255, 255, 0.65); + --color-text-tertiary: rgba(255, 255, 255, 0.45); + --color-text-quaternary: rgba(255, 255, 255, 0.25); + + --color-border: #434343; + --color-border-secondary: #303030; + + --color-bg-container: #1f1f1f; + --color-bg-layout: #141414; + --color-bg-mask: rgba(0, 0, 0, 0.65); + + /* Fill colors for dark mode */ + --color-fill-quaternary: rgba(255, 255, 255, 0.08); + + --shadow-card: 0 8px 28px rgba(0, 0, 0, 0.28); + --shadow-card-hover: 0 14px 36px rgba(0, 0, 0, 0.4); +} + +/* ========== Gray Mode ========== */ +html.gray-mode { + filter: grayscale(100%); +} diff --git a/antdv-next-admin/src/components/Captcha/index.ts b/antdv-next-admin/src/components/Captcha/index.ts new file mode 100644 index 0000000..43c47b8 --- /dev/null +++ b/antdv-next-admin/src/components/Captcha/index.ts @@ -0,0 +1,6 @@ +import PointCaptcha from './src/PointCaptcha.vue'; +import PuzzleCaptcha from './src/PuzzleCaptcha.vue'; +import RotateCaptcha from './src/RotateCaptcha.vue'; +import SliderCaptcha from './src/SliderCaptcha.vue'; + +export { SliderCaptcha, RotateCaptcha, PuzzleCaptcha, PointCaptcha }; diff --git a/antdv-next-admin/src/components/Captcha/src/PointCaptcha.vue b/antdv-next-admin/src/components/Captcha/src/PointCaptcha.vue new file mode 100644 index 0000000..bf659d1 --- /dev/null +++ b/antdv-next-admin/src/components/Captcha/src/PointCaptcha.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/antdv-next-admin/src/components/Captcha/src/PuzzleCaptcha.vue b/antdv-next-admin/src/components/Captcha/src/PuzzleCaptcha.vue new file mode 100644 index 0000000..0aa5a03 --- /dev/null +++ b/antdv-next-admin/src/components/Captcha/src/PuzzleCaptcha.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/antdv-next-admin/src/components/Captcha/src/RotateCaptcha.vue b/antdv-next-admin/src/components/Captcha/src/RotateCaptcha.vue new file mode 100644 index 0000000..c55644f --- /dev/null +++ b/antdv-next-admin/src/components/Captcha/src/RotateCaptcha.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/antdv-next-admin/src/components/Captcha/src/SliderCaptcha.vue b/antdv-next-admin/src/components/Captcha/src/SliderCaptcha.vue new file mode 100644 index 0000000..ba4ca10 --- /dev/null +++ b/antdv-next-admin/src/components/Captcha/src/SliderCaptcha.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/antdv-next-admin/src/components/Captcha/types.ts b/antdv-next-admin/src/components/Captcha/types.ts new file mode 100644 index 0000000..0677304 --- /dev/null +++ b/antdv-next-admin/src/components/Captcha/types.ts @@ -0,0 +1,12 @@ +export interface CaptchaProps { + width?: number | string; + height?: number | string; + src?: string; + text?: string; + successText?: string; +} + +export interface Point { + x: number; + y: number; +} diff --git a/antdv-next-admin/src/components/Editor/index.vue b/antdv-next-admin/src/components/Editor/index.vue new file mode 100644 index 0000000..f1e3ca3 --- /dev/null +++ b/antdv-next-admin/src/components/Editor/index.vue @@ -0,0 +1,467 @@ + + + + + diff --git a/antdv-next-admin/src/components/Global/defaultComponentProps.ts b/antdv-next-admin/src/components/Global/defaultComponentProps.ts new file mode 100644 index 0000000..a1fe51b --- /dev/null +++ b/antdv-next-admin/src/components/Global/defaultComponentProps.ts @@ -0,0 +1,51 @@ +import type { App, Component } from "vue"; + +import { Select, DatePicker, DateRangePicker } from "antdv-next"; +import { defineComponent, h } from "vue"; + +import { appDefaultSettings } from "@/settings"; + +type AttrMap = Record; + +const withAllowClearDefault = ( + name: string, + component: Component, + getDefaultAllowClear: () => boolean, +) => { + return defineComponent({ + name, + inheritAttrs: false, + setup(_, { attrs, slots }) { + return () => { + const props = attrs as AttrMap; + const allowClear = props.allowClear ?? getDefaultAllowClear(); + + return h(component, { ...props, allowClear }, slots); + }; + }, + }); +}; + +const SelectWithDefaults = withAllowClearDefault( + "ASelectWithDefaults", + Select, + () => appDefaultSettings.select.allowClear, +); + +const DatePickerWithDefaults = withAllowClearDefault( + "ADatePickerWithDefaults", + DatePicker, + () => appDefaultSettings.datePicker.allowClear, +); + +const RangePickerWithDefaults = withAllowClearDefault( + "ARangePickerWithDefaults", + DateRangePicker, + () => appDefaultSettings.datePicker.allowClear, +); + +export const registerDefaultComponentProps = (app: App) => { + app.component("ASelect", SelectWithDefaults); + app.component("ADatePicker", DatePickerWithDefaults); + app.component("ARangePicker", RangePickerWithDefaults); +}; diff --git a/antdv-next-admin/src/components/I18nInput/index.vue b/antdv-next-admin/src/components/I18nInput/index.vue new file mode 100644 index 0000000..f96fca7 --- /dev/null +++ b/antdv-next-admin/src/components/I18nInput/index.vue @@ -0,0 +1,189 @@ + + + diff --git a/antdv-next-admin/src/components/Icon/index.vue b/antdv-next-admin/src/components/Icon/index.vue new file mode 100644 index 0000000..a7ff74e --- /dev/null +++ b/antdv-next-admin/src/components/Icon/index.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/antdv-next-admin/src/components/IconPicker/CLAUDE.md b/antdv-next-admin/src/components/IconPicker/CLAUDE.md new file mode 100644 index 0000000..eac2e03 --- /dev/null +++ b/antdv-next-admin/src/components/IconPicker/CLAUDE.md @@ -0,0 +1,14 @@ + +# Recent Activity + + + +### Feb 11, 2026 + +| ID | Time | T | Title | Read | +| ---- | ------- | --- | ---------------------------------------------------- | ---- | +| #360 | 5:43 PM | 🔄 | Removed Unused Popover Configuration Objects | ~224 | +| #359 | " | ✅ | IconPicker Icon Size Reduced | ~179 | +| #358 | " | 🔵 | IconPicker Component with Online/Offline Icon Search | ~673 | + + diff --git a/antdv-next-admin/src/components/IconPicker/index.vue b/antdv-next-admin/src/components/IconPicker/index.vue new file mode 100644 index 0000000..23a32be --- /dev/null +++ b/antdv-next-admin/src/components/IconPicker/index.vue @@ -0,0 +1,760 @@ + + + + + + + diff --git a/antdv-next-admin/src/components/JsonInput/JsonFieldTreeList.vue b/antdv-next-admin/src/components/JsonInput/JsonFieldTreeList.vue new file mode 100644 index 0000000..570bc08 --- /dev/null +++ b/antdv-next-admin/src/components/JsonInput/JsonFieldTreeList.vue @@ -0,0 +1,667 @@ + + + + + diff --git a/antdv-next-admin/src/components/JsonInput/index.vue b/antdv-next-admin/src/components/JsonInput/index.vue new file mode 100644 index 0000000..b3c9206 --- /dev/null +++ b/antdv-next-admin/src/components/JsonInput/index.vue @@ -0,0 +1,1035 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/AICollabPanel.vue b/antdv-next-admin/src/components/Layout/AICollabPanel.vue new file mode 100644 index 0000000..544a7cf --- /dev/null +++ b/antdv-next-admin/src/components/Layout/AICollabPanel.vue @@ -0,0 +1,402 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/AdminLayout.vue b/antdv-next-admin/src/components/Layout/AdminLayout.vue new file mode 100644 index 0000000..91589fa --- /dev/null +++ b/antdv-next-admin/src/components/Layout/AdminLayout.vue @@ -0,0 +1,955 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/AvatarDropdown.vue b/antdv-next-admin/src/components/Layout/AvatarDropdown.vue new file mode 100644 index 0000000..80a1b63 --- /dev/null +++ b/antdv-next-admin/src/components/Layout/AvatarDropdown.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/Breadcrumb.vue b/antdv-next-admin/src/components/Layout/Breadcrumb.vue new file mode 100644 index 0000000..af28f50 --- /dev/null +++ b/antdv-next-admin/src/components/Layout/Breadcrumb.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/FullscreenToggle.vue b/antdv-next-admin/src/components/Layout/FullscreenToggle.vue new file mode 100644 index 0000000..8cb8bf1 --- /dev/null +++ b/antdv-next-admin/src/components/Layout/FullscreenToggle.vue @@ -0,0 +1,16 @@ + + + diff --git a/antdv-next-admin/src/components/Layout/GlobalSearch.vue b/antdv-next-admin/src/components/Layout/GlobalSearch.vue new file mode 100644 index 0000000..a0bcc91 --- /dev/null +++ b/antdv-next-admin/src/components/Layout/GlobalSearch.vue @@ -0,0 +1,729 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/Header.vue b/antdv-next-admin/src/components/Layout/Header.vue new file mode 100644 index 0000000..6fb4bae --- /dev/null +++ b/antdv-next-admin/src/components/Layout/Header.vue @@ -0,0 +1,457 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/LanguageSwitch.vue b/antdv-next-admin/src/components/Layout/LanguageSwitch.vue new file mode 100644 index 0000000..dcae1bf --- /dev/null +++ b/antdv-next-admin/src/components/Layout/LanguageSwitch.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/MenuItem.vue b/antdv-next-admin/src/components/Layout/MenuItem.vue new file mode 100644 index 0000000..d800463 --- /dev/null +++ b/antdv-next-admin/src/components/Layout/MenuItem.vue @@ -0,0 +1,57 @@ + + + diff --git a/antdv-next-admin/src/components/Layout/NotificationPanel.vue b/antdv-next-admin/src/components/Layout/NotificationPanel.vue new file mode 100644 index 0000000..5f37725 --- /dev/null +++ b/antdv-next-admin/src/components/Layout/NotificationPanel.vue @@ -0,0 +1,535 @@ + + + + + + + diff --git a/antdv-next-admin/src/components/Layout/SettingsDrawer.vue b/antdv-next-admin/src/components/Layout/SettingsDrawer.vue new file mode 100644 index 0000000..6b0315e --- /dev/null +++ b/antdv-next-admin/src/components/Layout/SettingsDrawer.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/Sidebar.vue b/antdv-next-admin/src/components/Layout/Sidebar.vue new file mode 100644 index 0000000..bfc42dd --- /dev/null +++ b/antdv-next-admin/src/components/Layout/Sidebar.vue @@ -0,0 +1,381 @@ + + + + + diff --git a/antdv-next-admin/src/components/Layout/TabBar.vue b/antdv-next-admin/src/components/Layout/TabBar.vue new file mode 100644 index 0000000..05ec26f --- /dev/null +++ b/antdv-next-admin/src/components/Layout/TabBar.vue @@ -0,0 +1,503 @@ + + + + + + + diff --git a/antdv-next-admin/src/components/Layout/ThemeToggle.vue b/antdv-next-admin/src/components/Layout/ThemeToggle.vue new file mode 100644 index 0000000..38da7c1 --- /dev/null +++ b/antdv-next-admin/src/components/Layout/ThemeToggle.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/antdv-next-admin/src/components/Milkdown/index.vue b/antdv-next-admin/src/components/Milkdown/index.vue new file mode 100644 index 0000000..cbc1fe3 --- /dev/null +++ b/antdv-next-admin/src/components/Milkdown/index.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/antdv-next-admin/src/components/Permission/PermissionButton.vue b/antdv-next-admin/src/components/Permission/PermissionButton.vue new file mode 100644 index 0000000..1e8709f --- /dev/null +++ b/antdv-next-admin/src/components/Permission/PermissionButton.vue @@ -0,0 +1,34 @@ + + + diff --git a/antdv-next-admin/src/components/Pro/ProChart/index.vue b/antdv-next-admin/src/components/Pro/ProChart/index.vue new file mode 100644 index 0000000..cabbd41 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProChart/index.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProCodeEditor/index.vue b/antdv-next-admin/src/components/Pro/ProCodeEditor/index.vue new file mode 100644 index 0000000..06e4881 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProCodeEditor/index.vue @@ -0,0 +1,514 @@ + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProDescriptions/index.vue b/antdv-next-admin/src/components/Pro/ProDescriptions/index.vue new file mode 100644 index 0000000..6ab9a43 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProDescriptions/index.vue @@ -0,0 +1,66 @@ + + + diff --git a/antdv-next-admin/src/components/Pro/ProDetail/index.vue b/antdv-next-admin/src/components/Pro/ProDetail/index.vue new file mode 100644 index 0000000..5ae577a --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProDetail/index.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProForm/FormItemRender.vue b/antdv-next-admin/src/components/Pro/ProForm/FormItemRender.vue new file mode 100644 index 0000000..487e161 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProForm/FormItemRender.vue @@ -0,0 +1,255 @@ + + + diff --git a/antdv-next-admin/src/components/Pro/ProForm/index.vue b/antdv-next-admin/src/components/Pro/ProForm/index.vue new file mode 100644 index 0000000..f8dd093 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProForm/index.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProModal/index.vue b/antdv-next-admin/src/components/Pro/ProModal/index.vue new file mode 100644 index 0000000..c269c36 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProModal/index.vue @@ -0,0 +1,990 @@ + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProSplitLayout/index.vue b/antdv-next-admin/src/components/Pro/ProSplitLayout/index.vue new file mode 100644 index 0000000..2845906 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProSplitLayout/index.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProStatCard/index.vue b/antdv-next-admin/src/components/Pro/ProStatCard/index.vue new file mode 100644 index 0000000..cd08d7d --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProStatCard/index.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/antdv-next-admin/src/components/Pro/ProStatus/index.vue b/antdv-next-admin/src/components/Pro/ProStatus/index.vue new file mode 100644 index 0000000..a44eb48 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProStatus/index.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProStepForm/index.vue b/antdv-next-admin/src/components/Pro/ProStepForm/index.vue new file mode 100644 index 0000000..6bd4cd3 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProStepForm/index.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProTable/CLAUDE.md b/antdv-next-admin/src/components/Pro/ProTable/CLAUDE.md new file mode 100644 index 0000000..6abb6e5 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProTable/CLAUDE.md @@ -0,0 +1,12 @@ + +# Recent Activity + + + +### Feb 11, 2026 + +| ID | Time | T | Title | Read | +| ---- | ------- | --- | ----------------------------------------- | ---- | +| #345 | 5:40 PM | 🔵 | ProTable Component Implementation Started | ~426 | + + diff --git a/antdv-next-admin/src/components/Pro/ProTable/ValueTypeRender.vue b/antdv-next-admin/src/components/Pro/ProTable/ValueTypeRender.vue new file mode 100644 index 0000000..44d0762 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProTable/ValueTypeRender.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProTable/index.vue b/antdv-next-admin/src/components/Pro/ProTable/index.vue new file mode 100644 index 0000000..d62b9c4 --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProTable/index.vue @@ -0,0 +1,2485 @@ + + + + + + + diff --git a/antdv-next-admin/src/components/Pro/ProUpload/index.vue b/antdv-next-admin/src/components/Pro/ProUpload/index.vue new file mode 100644 index 0000000..92480ac --- /dev/null +++ b/antdv-next-admin/src/components/Pro/ProUpload/index.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/antdv-next-admin/src/components/RouteView.vue b/antdv-next-admin/src/components/RouteView.vue new file mode 100644 index 0000000..98240ae --- /dev/null +++ b/antdv-next-admin/src/components/RouteView.vue @@ -0,0 +1,3 @@ + diff --git a/antdv-next-admin/src/composables/useFullscreen.ts b/antdv-next-admin/src/composables/useFullscreen.ts new file mode 100644 index 0000000..a95d5e3 --- /dev/null +++ b/antdv-next-admin/src/composables/useFullscreen.ts @@ -0,0 +1,118 @@ +import { ref, onMounted, onUnmounted } from 'vue'; + +interface FullscreenElement extends HTMLElement { + webkitRequestFullscreen?: () => Promise; + mozRequestFullScreen?: () => Promise; + msRequestFullscreen?: () => Promise; +} + +interface FullscreenDocument extends Document { + webkitExitFullscreen?: () => Promise; + mozCancelFullScreen?: () => Promise; + msExitFullscreen?: () => Promise; + webkitFullscreenElement?: Element | null; + mozFullScreenElement?: Element | null; + msFullscreenElement?: Element | null; +} + +/** + * Fullscreen composable + */ +export function useFullscreen() { + const isFullscreen = ref(false); + + /** + * Enter fullscreen + */ + const enter = async (): Promise => { + try { + const element = document.documentElement as FullscreenElement; + + if (element.requestFullscreen) { + await element.requestFullscreen(); + } else if (element.webkitRequestFullscreen) { + await element.webkitRequestFullscreen(); + } else if (element.mozRequestFullScreen) { + await element.mozRequestFullScreen(); + } else if (element.msRequestFullscreen) { + await element.msRequestFullscreen(); + } + + isFullscreen.value = true; + } catch (error) { + console.error('Failed to enter fullscreen:', error); + } + }; + + /** + * Exit fullscreen + */ + const exit = async (): Promise => { + try { + const doc = document as FullscreenDocument; + if (document.exitFullscreen) { + await document.exitFullscreen(); + } else if (doc.webkitExitFullscreen) { + await doc.webkitExitFullscreen(); + } else if (doc.mozCancelFullScreen) { + await doc.mozCancelFullScreen(); + } else if (doc.msExitFullscreen) { + await doc.msExitFullscreen(); + } + + isFullscreen.value = false; + } catch (error) { + console.error('Failed to exit fullscreen:', error); + } + }; + + /** + * Toggle fullscreen + */ + const toggle = async (): Promise => { + if (isFullscreen.value) { + await exit(); + } else { + await enter(); + } + }; + + /** + * Handle fullscreen change event + */ + const handleFullscreenChange = () => { + const doc = document as FullscreenDocument; + isFullscreen.value = !!( + document.fullscreenElement || + doc.webkitFullscreenElement || + doc.mozFullScreenElement || + doc.msFullscreenElement + ); + }; + + onMounted(() => { + // Listen to fullscreen change events + document.addEventListener('fullscreenchange', handleFullscreenChange); + document.addEventListener('webkitfullscreenchange', handleFullscreenChange); + document.addEventListener('mozfullscreenchange', handleFullscreenChange); + document.addEventListener('MSFullscreenChange', handleFullscreenChange); + + // Check initial state + handleFullscreenChange(); + }); + + onUnmounted(() => { + // Remove event listeners + document.removeEventListener('fullscreenchange', handleFullscreenChange); + document.removeEventListener('webkitfullscreenchange', handleFullscreenChange); + document.removeEventListener('mozfullscreenchange', handleFullscreenChange); + document.removeEventListener('MSFullscreenChange', handleFullscreenChange); + }); + + return { + isFullscreen, + enter, + exit, + toggle, + }; +} diff --git a/antdv-next-admin/src/composables/usePermission.ts b/antdv-next-admin/src/composables/usePermission.ts new file mode 100644 index 0000000..da65485 --- /dev/null +++ b/antdv-next-admin/src/composables/usePermission.ts @@ -0,0 +1,74 @@ +import { computed } from 'vue'; + +import { useAuthStore } from '@/stores/auth'; + +/** + * Permission composable + */ +export function usePermission() { + const authStore = useAuthStore(); + + const permissions = computed(() => authStore.userPermissions); + const roles = computed(() => authStore.userRoles); + + /** + * Check if user has permission + */ + const can = (permission: string): boolean => { + return authStore.hasPermission(permission); + }; + + /** + * Check if user has any of the permissions + */ + const canAny = (permissionList: string[]): boolean => { + return authStore.hasAnyPermission(permissionList); + }; + + /** + * Check if user has all permissions + */ + const canAll = (permissionList: string[]): boolean => { + return authStore.hasAllPermissions(permissionList); + }; + + /** + * Check if user does not have permission + */ + const cannot = (permission: string): boolean => { + return !authStore.hasPermission(permission); + }; + + /** + * Check if user has role + */ + const hasRole = (role: string): boolean => { + return authStore.hasRole(role); + }; + + /** + * Check if user has any of the roles + */ + const hasAnyRole = (roleList: string[]): boolean => { + return authStore.hasAnyRole(roleList); + }; + + /** + * Check if user has all roles + */ + const hasAllRoles = (roleList: string[]): boolean => { + return authStore.hasAllRoles(roleList); + }; + + return { + permissions, + roles, + can, + canAny, + canAll, + cannot, + hasRole, + hasAnyRole, + hasAllRoles, + }; +} diff --git a/antdv-next-admin/src/composables/useWatermark.ts b/antdv-next-admin/src/composables/useWatermark.ts new file mode 100644 index 0000000..6121520 --- /dev/null +++ b/antdv-next-admin/src/composables/useWatermark.ts @@ -0,0 +1,153 @@ +import { onMounted, onUnmounted } from 'vue'; + +export interface WatermarkOptions { + text?: string; + fontSize?: number; + fontFamily?: string; + color?: string; + opacity?: number; + rotate?: number; + width?: number; + height?: number; + zIndex?: number; +} + +/** + * Watermark composable + */ +export function useWatermark(options: WatermarkOptions = {}) { + const { + text = 'Watermark', + fontSize = 16, + fontFamily = 'Arial', + color = 'rgba(0, 0, 0, 0.15)', + opacity = 1, + rotate = -20, + width = 300, + height = 200, + zIndex = 9999, + } = options; + + let watermarkDiv: HTMLDivElement | null = null; + let observer: MutationObserver | null = null; + + /** + * Create watermark canvas + */ + const createWatermarkCanvas = (): string => { + const canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + + const ctx = canvas.getContext('2d'); + if (!ctx) return ''; + + ctx.clearRect(0, 0, width, height); + ctx.globalAlpha = opacity; + ctx.font = `${fontSize}px ${fontFamily}`; + ctx.fillStyle = color; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + + // Rotate canvas + ctx.translate(width / 2, height / 2); + ctx.rotate((rotate * Math.PI) / 180); + ctx.translate(-width / 2, -height / 2); + + // Draw text + ctx.fillText(text, width / 2, height / 2); + + return canvas.toDataURL(); + }; + + /** + * Create watermark element + */ + const createWatermark = (): HTMLDivElement => { + const div = document.createElement('div'); + div.className = 'watermark-container'; + + const base64Url = createWatermarkCanvas(); + + div.style.cssText = ` + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + background-image: url(${base64Url}); + background-repeat: repeat; + z-index: ${zIndex}; + `; + + return div; + }; + + /** + * Add watermark to document + */ + const addWatermark = () => { + // Remove existing watermark + removeWatermark(); + + // Create new watermark + watermarkDiv = createWatermark(); + document.body.appendChild(watermarkDiv); + + // Prevent watermark from being removed + observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'childList') { + const removed = Array.from(mutation.removedNodes).some((node) => node === watermarkDiv); + if (removed) { + addWatermark(); + } + } + }); + }); + + observer.observe(document.body, { + childList: true, + subtree: true, + }); + }; + + /** + * Remove watermark + */ + const removeWatermark = () => { + if (watermarkDiv && watermarkDiv.parentNode) { + watermarkDiv.parentNode.removeChild(watermarkDiv); + watermarkDiv = null; + } + + if (observer) { + observer.disconnect(); + observer = null; + } + }; + + /** + * Update watermark + */ + const updateWatermark = (newOptions: Partial) => { + Object.assign(options, newOptions); + addWatermark(); + }; + + // Auto add/remove watermark + onMounted(() => { + addWatermark(); + }); + + onUnmounted(() => { + removeWatermark(); + }); + + return { + addWatermark, + removeWatermark, + updateWatermark, + }; +} diff --git a/antdv-next-admin/src/directives/index.ts b/antdv-next-admin/src/directives/index.ts new file mode 100644 index 0000000..5b8147d --- /dev/null +++ b/antdv-next-admin/src/directives/index.ts @@ -0,0 +1,12 @@ +import type { App } from 'vue'; + +import { vPermission } from './permission'; + +/** + * Register all directives + */ +export function setupDirectives(app: App) { + app.directive('permission', vPermission); +} + +export { vPermission }; diff --git a/antdv-next-admin/src/directives/permission.ts b/antdv-next-admin/src/directives/permission.ts new file mode 100644 index 0000000..0ea0165 --- /dev/null +++ b/antdv-next-admin/src/directives/permission.ts @@ -0,0 +1,56 @@ +import type { App, Directive, DirectiveBinding } from "vue"; + +import { useAuthStore } from "@/stores/auth"; + +const placeholderMap = new WeakMap(); + +export const vPermission: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + checkPermission(el, binding); + }, + updated(el: HTMLElement, binding: DirectiveBinding) { + checkPermission(el, binding); + }, +}; + +function checkPermission(el: HTMLElement, binding: DirectiveBinding) { + const { value, modifiers } = binding; + const authStore = useAuthStore(); + + if (!value) { + throw new Error( + "Permission value is required. Usage: v-permission=\"'user.create'\"", + ); + } + + const permissions = Array.isArray(value) ? value : [value]; + let hasPermission = false; + + if (modifiers.all) { + hasPermission = permissions.every((perm) => authStore.hasPermission(perm)); + } else { + hasPermission = permissions.some((perm) => authStore.hasPermission(perm)); + } + + if (!hasPermission) { + const placeholder = + placeholderMap.get(el) ?? document.createComment("v-permission"); + + if (el.parentNode && !placeholderMap.has(el)) { + placeholderMap.set(el, placeholder); + el.parentNode.replaceChild(placeholder, el); + } + } else { + const placeholder = placeholderMap.get(el); + if (placeholder?.parentNode) { + placeholder.parentNode.replaceChild(el, placeholder); + placeholderMap.delete(el); + } + } +} + +export function setupPermissionDirective(app: App) { + app.directive("permission", vPermission); +} + +export default vPermission; diff --git a/antdv-next-admin/src/locales/en-US.ts b/antdv-next-admin/src/locales/en-US.ts new file mode 100644 index 0000000..890554d --- /dev/null +++ b/antdv-next-admin/src/locales/en-US.ts @@ -0,0 +1,1624 @@ +export default { + common: { + appName: "Antdv Next Admin", + add: "Add", + edit: "Edit", + delete: "Delete", + view: "View", + search: "Search", + reset: "Reset", + submit: "Submit", + cancel: "Cancel", + confirm: "Confirm", + save: "Save", + export: "Export", + import: "Import", + refresh: "Refresh", + operate: "Operate", + more: "More", + back: "Back", + expand: "Expand", + collapse: "Collapse", + ok: "OK", + close: "Close", + yes: "Yes", + no: "No", + loading: "Loading...", + noData: "No Data", + success: "Success", + error: "Error", + warning: "Warning", + info: "Info", + copySuccess: "Copied successfully", + copyFailed: "Copy failed", + actions: "Actions", + status: "Status", + createTime: "Create Time", + updateTime: "Update Time", + menu: "Menu", + navigate: "Navigate", + select: "Select", + clear: "Clear", + component: "Component", + basicUsage: "Basic Usage", + advancedUsage: "Advanced Usage", + preview: "Preview", + jsonContent: "JSON Content", + jsonPlaceholder: "Enter valid JSON...", + jsonParseError: "Invalid JSON format", + invalidArray: "Invalid array format", + formEdit: "Form Edit", + rawEdit: "Raw Edit", + addField: "Add Field", + fieldName: "Field Name", + fieldExists: "Field already exists", + pleaseInput: "Please input", + fieldOrder: "Field Order", + moveUp: "Move Up", + moveDown: "Move Down", + enabled: "Enabled", + disabled: "Disabled", + inputTags: "Input tags and press Enter", + addSuccess: "Added successfully", + pleaseInputFieldName: "Please input field name", + inputFieldName: "Input field name", + selectFieldType: "Select field type", + typeString: "String", + typeNumber: "Number", + typeBoolean: "Boolean", + typeTags: "Tags", + typeArray: "Array", + typeObject: "Object", + searchLabel: "Search {label}", + }, + + codeEditor: { + format: "Format", + minify: "Minify", + copy: "Copy", + formatSuccess: "Formatted successfully", + minifySuccess: "Minified successfully", + copySuccess: "Copied to clipboard", + copyFailed: "Failed to copy", + jsonError: "Invalid JSON format", + }, + + menu: { + dashboard: "Dashboard", + organization: "Organization", + system: "System", + user: "User Management", + role: "Role Management", + permission: "Menu Management", + dict: "Dictionary", + log: "System Log", + dept: "Department", + config: "System Config", + file: "File Management", + examples: "Examples Hub", + examplesQuickStart: "Quick Start", + examplesFormInput: "Forms & Input", + examplesContent: "Content Editors", + examplesInteraction: "Basic Interaction", + examplesBusinessScaffold: "Business Scaffolds", + examplesSecurityEngineering: "Security & Engineering", + examplesIntegration: "Integration & Navigation", + examplesExceptionPages: "Exception Pages", + table: "Table Example", + icon: "Icon Example", + form: "Form Example", + jsonInput: "JSON Input", + i18nInput: "I18n Input", + advancedFilter: "Advanced Filter Builder", + editor: "Rich Text Editor", + milkdown: "Markdown Editor", + codeEditor: "Code Editor", + modal: "Modal Example", + spin: "Spin Example", + watermark: "Watermark", + splitter: "Splitter", + tour: "Tour Guide", + qrcode: "QR Code", + segmented: "Segmented", + colorPicker: "Color Picker", + requestAuth: "Request/Auth Flow", + rbacFlow: "RBAC Flow", + proTableAdvanced: "ProTable Advanced", + complexForm: "Complex Form", + uploadSystem: "Upload System", + importExport: "Import/Export Flow", + masterDetail: "Master Detail", + virtualTable: "Virtual Scroll Table", + stateCache: "State & Cache", + observability: "Observability", + testing: "Testing", + exception: "Exception", + exception403: "403", + exception404: "404", + exception500: "500", + profile: "Profile", + about: "About", + }, + + layout: { + logout: "Logout", + logoutConfirm: "Are you sure you want to logout?", + profile: "Profile", + documentation: "Documentation", + settings: "Settings", + theme: "Theme", + themeLight: "Light Theme", + themeDark: "Dark Theme", + themeAuto: "Follow System", + language: "Language", + fullscreen: "Fullscreen", + exitFullscreen: "Exit Fullscreen", + notifications: "Notifications", + markAllRead: "Mark All Read", + clearAll: "Clear All", + noNotifications: "No Notifications", + notificationsEmptyHint: + "After clearing, new notifications will appear here", + viewDetails: "View details", + viewAllNotifications: "View all notifications", + searchPlaceholder: "Search menu...", + noSearchResults: "No matching menu found", + recentMenus: "Recent Visits", + aiCollabEnable: "Enable AI Collaboration", + aiCollabDisable: "Disable AI Collaboration", + aiAssistantTitle: "AI Collaboration", + aiAssistantSubtitle: "Assist actions with current page context", + aiCurrentPage: "Current Page", + aiQuickActions: "Quick Actions", + aiInputPlaceholder: + "Enter your question or command (Shift+Enter for new line)", + aiEnterHint: "Press Enter to send, Shift+Enter for new line", + aiEmptyTitle: "Start AI Collaboration", + aiEmptyDescription: + "Ask AI to explain pages, summarize data, and suggest next actions", + aiActionExplain: "Explain current page", + aiActionSummary: "Summarize current data", + aiActionRisk: "Identify potential risks", + aiActionNextStep: "Suggest next steps", + aiDemoReply: + 'Request received. I am generating suggestions based on the "{page}" page context.', + languages: { + zhCN: "Simplified Chinese", + enUS: "English", + jaJP: "Japanese", + koKR: "Korean", + }, + tabs: { + refresh: "Refresh", + close: "Close", + pin: "Pin", + unpin: "Unpin", + favorite: "Add to Favorites", + unfavorite: "Remove from Favorites", + closeOthers: "Close Others", + closeAll: "Close All", + closeLeft: "Close Left", + closeRight: "Close Right", + moreActions: "More Tab Actions", + }, + }, + + settings: { + title: "Preferences", + themeColor: "Theme Color", + sidebarTheme: "Sidebar Theme", + light: "Light", + dark: "Dark", + layoutMode: "Layout Mode", + vertical: "Vertical", + horizontal: "Horizontal", + pageAnimation: "Page Animation", + fade: "Fade", + slideLeft: "Slide Left", + slideRight: "Slide Right", + slideUp: "Slide Up", + slideDown: "Slide Down", + zoom: "Zoom", + zoomBig: "Zoom Big", + none: "None", + grayMode: "Gray Mode", + grayModeHint: "Enable grayscale mode for the entire app", + rememberTabState: "Remember Tab State", + rememberTabStateHint: + "Automatically restore previously opened tabs after refresh", + aiCollab: "AI Chat Split View", + aiCollabHint: "Show AI chat entry icon in the top navigation bar", + aiCollabHintMobile: "AI chat split view is not available on mobile", + reset: "Reset Settings", + confirmReset: "Are you sure you want to reset all preferences?", + colors: { + blue: "Daybreak Blue", + green: "Polar Green", + purple: "Golden Purple", + red: "Dust Red", + orange: "Sunset Orange", + cyan: "Cyan", + }, + }, + + login: { + title: "User Login", + username: "Username", + password: "Password", + remember: "Remember me", + login: "Login", + forgotPassword: "Forgot password", + noAccount: "Don't have an account?", + register: "Register now", + usernamePlaceholder: "Please enter username", + passwordPlaceholder: "Please enter password", + usernameRequired: "Please enter username", + passwordRequired: "Please enter password", + loginSuccess: "Login successful", + loginFailed: "Login failed", + slideToVerify: "Slide to verify", + verifySuccess: "Verified", + }, + + dashboard: { + welcome: "Welcome Back", + subtitle: "Monitor your business metrics and system status in real time", + systemStable: "System Stable", + todayFocus: "Today Focus", + compareYesterday: "vs yesterday {value}", + goodMorning: "Good morning", + goodAfternoon: "Good afternoon", + goodEvening: "Good evening", + goodNight: "Good night", + totalUsers: "Total Users", + totalOrders: "Total Orders", + totalRevenue: "Total Revenue", + conversionRate: "Conversion Rate", + newUsers: "New Users", + returningUsers: "Returning Users", + enterpriseUsers: "Enterprise Users", + salesTrend: "Sales Trend", + userDistribution: "User Distribution", + recentActivities: "Recent Activities", + quickActions: "Quick Actions", + viewMore: "View More", + minutesAgo: "{value} minutes ago", + hoursAgo: "{value} hours ago", + activities: { + permissionUpdated: "Admin updated system menu permission settings", + userCreated: "Created user Sunny and assigned the operation role", + orderTaskDone: "Today's order statistics task has completed", + riskPolicyReleased: + "Risk control strategy version has been released to production", + }, + activityTags: { + system: "System", + user: "User", + task: "Task", + release: "Release", + }, + months: { + jan: "Jan", + feb: "Feb", + mar: "Mar", + apr: "Apr", + may: "May", + jun: "Jun", + jul: "Jul", + aug: "Aug", + }, + }, + + user: { + title: "User Management", + username: "Username", + email: "Email", + realName: "Real Name", + phone: "Phone", + gender: "Gender", + male: "Male", + female: "Female", + avatar: "Avatar", + role: "Role", + status: "Status", + active: "Active", + inactive: "Inactive", + createUser: "Create User", + editUser: "Edit User", + deleteUser: "Delete User", + confirmDelete: "Are you sure you want to delete this user?", + usernameRequired: "Please enter username", + usernameLength: "Username length must be between 3 and 20 characters", + emailRequired: "Please enter email", + selectRole: "Please select at least one role", + bio: "Bio", + updateSuccess: "User updated successfully", + createSuccess: "User created successfully", + resetPassword: "Reset Password", + confirmResetPassword: + "Are you sure you want to reset this user's password?", + exportSuccess: "Export successful", + exportFailed: "Export failed", + importSuccess: "Successfully imported {count} records", + importFailed: "Import failed, please check file format", + importEmpty: "File is empty or format is incorrect", + importFormatError: + 'CSV format is incorrect, must include "Username", "Name", "Email" columns', + age: "Age", + tags: "Tags", + address: "Address", + department: "Department", + position: "Position", + info: "User Info", + settings: "Settings", + theme: "Theme", + language: "Language", + }, + + role: { + title: "Role Management", + name: "Role Name", + code: "Role Code", + description: "Description", + permissions: "Permissions", + createRole: "Create Role", + editRole: "Edit Role", + deleteRole: "Delete Role", + confirmDelete: "Are you sure you want to delete this role?", + assignPermissions: "Assign Permissions", + codeRequired: "Please enter role code", + codePattern: + "Role code only supports letters, numbers, underscores and hyphens", + selectPermissions: "Please select permissions", + updateSuccess: "Role updated successfully", + createSuccess: "Role created successfully", + }, + + permission: { + title: "Menu Management", + name: "Menu Name", + code: "Permission Code", + type: "Type", + menu: "Menu", + button: "Button", + api: "API", + resource: "Resource", + action: "Action", + createPermission: "Create Menu", + editPermission: "Edit Menu", + deletePermission: "Delete Menu", + confirmDelete: + "Are you sure you want to delete this menu and its children?", + expandAll: "Expand All", + collapseAll: "Collapse All", + parentMenu: "Parent Menu", + createChildMenu: "Create Child Menu", + visible: "Visible", + show: "Show", + hide: "Hide", + routePath: "Route Path", + componentPath: "Component Path", + sort: "Sort", + addChild: "Add Child", + codeRequired: "Please enter permission code", + codePattern: + "Permission code only supports letters, numbers, underscores and hyphens", + menuRouteRequired: "Route path is required for menu type", + icon: "Icon", + iconPlaceholder: "e.g. UserOutlined", + visibleStatus: "Visibility", + updateSuccess: "Menu updated successfully", + createSuccess: "Menu created successfully", + }, + + dict: { + title: "Dictionary", + dictType: "Dictionary Type", + dictData: "Dictionary Data", + typeName: "Type Name", + typeCode: "Type Code", + description: "Description", + dictLabel: "Label", + dictValue: "Value", + sort: "Sort", + remark: "Remark", + enabled: "Enabled", + disabled: "Disabled", + createType: "Create Type", + editType: "Edit Type", + deleteType: "Delete Type", + createData: "Create Data", + editData: "Edit Data", + deleteData: "Delete Data", + confirmDeleteType: + 'Are you sure you want to delete dictionary type "{name}"?', + confirmDeleteData: + 'Are you sure you want to delete dictionary data "{label}"?', + typeNamePlaceholder: "Please enter type name", + typeCodePlaceholder: "Please enter type code", + descriptionPlaceholder: "Please enter description", + labelPlaceholder: "Please enter label", + valuePlaceholder: "Please enter value", + remarkPlaceholder: "Please enter remark", + selectTypeHint: "Please select a dictionary type from the left", + requiredFields: "Please fill in required fields", + deleteSuccess: "Deleted successfully", + deleteFailed: "Delete failed", + updateSuccess: "Updated successfully", + createSuccess: "Created successfully", + operateFailed: "Operation failed", + loadTypeFailed: "Failed to load dictionary types", + loadDataFailed: "Failed to load dictionary data", + dictDataTitle: "Dictionary Data - {name}", + confirmDelete: "Confirm Delete", + }, + + table: { + title: "Table Example", + total: "Total {total} items", + page: "Page {page}", + pageSize: "{size} items per page", + goTo: "Go to", + }, + + form: { + title: "Form Example", + basicInfo: "Basic Information", + advancedInfo: "Advanced Information", + submit: "Submit", + reset: "Reset", + validateSuccess: "Validation passed", + validateFailed: "Validation failed", + }, + + exampleTable: { + userList: "User List", + subTitle: "ProTable Example", + createUser: "Create User", + editUser: "Edit User", + deleteSuccess: "Deleted successfully", + updateSuccess: "Updated successfully", + createSuccess: "Created successfully", + }, + + notificationCenter: { + kicker: "Notification Hub", + title: "Notification Center", + subtitle: + "Track system updates, messages, and task outcomes in one place with fast filtering and detail tracing.", + searchPlaceholder: "Search notifications by title or content", + listTitle: "Notification List", + listSubtitle: "{count} notifications matched", + emptyFiltered: "No matching notifications", + metrics: { + total: "Total Notifications", + unread: "Unread", + today: "Today", + }, + filters: { + allStatus: "All Status", + unread: "Unread", + read: "Read", + allTypes: "All Types", + system: "System Update", + message: "Message", + security: "Security Alert", + task: "Task Done", + error: "Error Alert", + }, + status: { + read: "Read", + unread: "Unread", + }, + meta: { + type: "Type", + receivedAt: "Received At", + }, + actions: { + markAsRead: "Mark as read", + openRelated: "Open related page", + delete: "Delete notification", + }, + placeholder: { + title: "Select a notification to view details", + desc: "Choose an item from the list on the left to see full content and related actions here.", + }, + }, + + exampleCaptcha: { + title: "Captcha Component Example", + description: + "Common frontend captcha interaction components with customizable styles and callbacks.", + slider: "Slider Captcha", + rotate: "Rotate Captcha", + puzzle: "Puzzle Captcha", + point: "Point Captcha", + success: "Verification passed!", + fail: "Verification failed, please retry", + }, + + exampleSpin: { + title: "Spin Example", + description: + "Demonstrates various usages of the Spin component including basic loading, sizes, custom indicators, progress, delay and fullscreen.", + basic: "Basic & Sizes", + tip: "Custom Tip", + nested: "Card Loading", + delay: "Delay", + customIndicator: "Custom Indicator", + percent: "Progress", + customStyle: "Custom Style", + fullscreen: "Fullscreen", + showFullscreen: "Show Fullscreen", + loadingState: "Loading state:", + }, + + exampleEditor: { + title: "Rich Text Editor Example", + description: + "A rich text editor based on Tiptap, supporting image upload, link insertion, formatting and more.", + basicUsage: "Basic Usage", + placeholder: "Enter content...", + disabledState: "Disabled State", + customHeight: "Custom Height", + contentPreview: "Content Preview", + htmlOutput: "HTML Output", + noContent: "No content", + save: "Save Content", + clear: "Clear Content", + loadDemo: "Load Demo", + savedMessage: "Content saved", + clearedMessage: "Content cleared", + demoLoadedMessage: "Demo content loaded", + }, + + exampleForm: { + description: "Advanced ProForm example demonstrating various form controls", + age: "Age", + ageRange: "Age must be between 1 and 150", + interests: "Interests", + birthDate: "Birth Date", + score: "Score", + progress: "Progress", + bioPlaceholder: "Please enter bio", + submitSuccess: "Submitted successfully!", + roles: { + admin: "Administrator", + user: "Regular User", + guest: "Guest", + }, + interestOptions: { + reading: "Reading", + sports: "Sports", + music: "Music", + travel: "Travel", + }, + }, + + exampleIcon: { + title: "Icon Showcase", + subtitle: "Unified demo for Icon component and IconPicker", + capabilities: + "Supports: local SVG, antdv-next icons, Iconify (offline sets + online search)", + renderTitle: "Three Render Modes", + renderSubtitle: "Click any sample to apply it to IconPicker below", + pickerTitle: "IconPicker Demo", + pickerSubtitle: + "Type 2+ chars to trigger online search; offline icon sets are available by category", + modelLabel: "Icon Value", + previewLabel: "Live Preview", + copy: "Copy Value", + copySuccess: "Icon value copied", + copyEmpty: "Please choose an icon first", + copyFailed: "Copy failed, please copy manually", + reset: "Reset Default", + sourceLabel: "Source", + sourceSvg: "Local SVG Symbol", + sourceAntdv: "antdv-next component icon", + sourceIconify: "Iconify icon", + sourceOnline: "Iconify online result", + sourceUnknown: "Unknown", + guidesTitle: "Integration Guide", + guidesSubtitle: + "Two common integration paths: SVG Symbol and Iconify (online + offline)", + svgGuideTitle: "How to add and use SVG", + iconifyGuideTitle: "How to use Iconify", + guideStepSvg1: + 'Inject definitions at app root (or layout root).', + guideStepSvg2: + "Use Icon component with svg:icon-id, e.g. svg:icon-demo-orbit.", + guideStepSvg3: + "For IconPicker local SVG detection, place files under src/assets/icons and pass svgIcons.", + guideStepIconify1: + "Pass iconify names directly: ri:home-line / mdi:account / ion:apps-outline.", + guideStepIconify2: + "IconPicker includes offline sets (ri / mdi / ion), available without network.", + guideStepIconify3: + "In All/Online category, type keywords (at least 2 chars) to search Iconify online.", + modeSvg: "SVG Sprite", + modeAntdv: "antdv-next", + modeIconify: "Iconify", + sampleHint: "Click to apply", + }, + + exampleWatermark: { + title: "Watermark Example", + description: + "Global watermark feature - configure and preview watermark effects in real time", + enableGlobal: "Enable Global Watermark", + content: "Watermark Text", + fontSize: "Font Size", + rotate: "Rotation", + opacity: "Opacity", + gapX: "Horizontal Gap", + gapY: "Vertical Gap", + preview: "Local Preview", + previewText: "This area is for previewing the watermark effect", + }, + + exampleSplitter: { + title: "Splitter Example", + description: + "Splitter component creates resizable split panel layouts with horizontal/vertical splitting, nested layouts, and panel configuration.", + basicTab: "Basic Split", + nestedTab: "Nested Layout", + configTab: "Panel Config", + businessTab: "Business Example", + horizontalSplit: "Horizontal Split (Left-Right)", + verticalSplit: "Vertical Split (Top-Bottom)", + leftPanel: "Left Panel", + rightPanel: "Right Panel", + topPanel: "Top Panel", + bottomPanel: "Bottom Panel", + threeColumnLayout: "Three-Column Nested Layout", + sidebarPanel: "Sidebar", + mainContent: "Main Content", + footerPanel: "Footer Area", + asidePanel: "Right Sidebar", + minSize: "Min Size", + maxSize: "Max Size", + defaultSize: "Default Size", + resizable: "Resizable", + configurablePanel: "Configurable Panel", + autoPanel: "Auto Panel", + codeEditorLayout: "Code Editor Layout Example", + }, + + exampleTour: { + title: "Tour Guide Example", + description: + "Tour component creates step-by-step guides to help users understand product features and workflows.", + startBasicTour: "Start Basic Tour", + startCustomTour: "Start Custom Tour", + searchButton: "Search", + createButton: "Create", + settingsButton: "Settings", + exportButton: "Export", + tourConfig: "Tour Configuration", + showMask: "Show Mask", + showArrow: "Show Arrow", + scrollIntoView: "Scroll Into View", + indicatorType: "Indicator Type", + step1Title: "Search Feature", + step1Desc: + "Click this button to search data in the system, supporting fuzzy matching and advanced filtering.", + step2Title: "Create Action", + step2Desc: + "Click this button to create new data records, supporting multiple data types.", + step3Title: "System Settings", + step3Desc: + "Click this button to access system settings and configure system parameters.", + step4Title: "Export Data", + step4Desc: + "Click this button to export current data to Excel, CSV, or other formats.", + customStep1Title: "Right Placement", + customStep1Desc: "The tour panel is displayed on the right of the target.", + customStep2Title: "Bottom Placement", + customStep2Desc: "The tour panel is displayed at the bottom of the target.", + customStep3Title: "Left Placement", + customStep3Desc: "The tour panel is displayed on the left of the target.", + customStep4Title: "Top Placement", + customStep4Desc: + "The tour panel is displayed on top of the target with a custom indicator.", + }, + + exampleQRCode: { + title: "QR Code Example", + description: + "QRCode component generates QR codes with custom styles, logos, status display, and download functionality.", + basicTab: "Basic", + styleTab: "Style Config", + logoTab: "With Logo", + statusTab: "Status", + downloadTab: "Download", + content: "QR Code Content", + size: "Size", + bgColor: "Background Color", + fgColor: "Foreground Color", + errorLevel: "Error Level", + logoHint: + "Use errorLevel='H' to ensure QR codes with logos can be scanned correctly", + statusActive: "Active", + statusExpired: "Expired", + statusLoading: "Loading", + downloadContent: "QR Code Content", + fileName: "File Name", + downloadButton: "Download QR Code", + downloadSuccess: "Download successful", + }, + + exampleSegmented: { + title: "Segmented Example", + description: + "Segmented component switches between multiple options, commonly used for view switching and filtering.", + basicTab: "Basic", + iconTab: "Icon Options", + blockTab: "Block Style", + disabledTab: "Disabled", + businessTab: "Business", + basicUsage: "Basic Usage", + currentValue: "Current Value", + sizes: "Different Sizes", + iconOptions: "Icon Only Options", + mixOptions: "Text + Icon Mix", + blockStyle: "Block Style (100% width)", + allDisabled: "All Disabled", + partialDisabled: "Partial Disabled", + viewSwitch: "View Switch", + filterSwitch: "Filter Condition", + filterResult: "Filter Result", + listItemTitle: "Data Item", + listItemDesc: "This is the description of the data item", + cardItemTitle: "Card", + }, + + exampleColorPicker: { + title: "Color Picker Example", + description: + "ColorPicker component for color selection with multiple formats, presets, and alpha support.", + basicTab: "Basic", + presetTab: "Presets", + formatTab: "Formats", + alphaTab: "Alpha", + disabledTab: "Disabled", + businessTab: "Business", + basicUsage: "Basic Usage", + sizes: "Different Sizes", + presetColors: "Preset Colors", + currentColor: "Current Color", + formatSupport: "Format Support", + withAlpha: "With Alpha", + withoutAlpha: "Without Alpha", + disabledState: "Disabled State", + disabledHint: "Cannot select color when disabled", + themeColor: "Theme Color Selection", + tagColors: "Tag Color Config", + addTag: "Add Tag", + tagName: "Tag Name", + tagColor: "Tag Color", + tagNameRequired: "Please enter tag name", + addTagSuccess: "Tag added successfully", + }, + + exampleModal: { + title: "ProModal Demo", + description: + "An enhanced wrapper around antdv-next Modal with drag, fullscreen, edge resize and viewport constraints.", + openDefault: "Open Default Modal", + openWide: "Open Wide Modal", + width: "Modal Width", + dataCount: "Data Size", + draggable: "Drag Title", + resizable: "Edge Resize", + fullscreenable: "Fullscreen Button", + mask: "Mask", + maskClosable: "Click Mask to Close", + keyboard: "ESC to Close", + modalTitle: "Draggable / Resizable ProModal", + hint: "Top-right actions provide fullscreen and close. Drag title to move. Drag edges/corners to resize.", + contentTitle: "Feature Demonstration", + contentDescription: + "The following long list is used to demonstrate scrolling and viewport boundary behavior.", + formKeyword: "Keyword", + formKeywordPlaceholder: "Please enter keyword", + formRemark: "Remark", + formRemarkPlaceholder: "Please enter remark", + rowText: "Demo data row #{index}", + confirmSuccess: "Confirmed successfully", + }, + + exampleException: { + "403title": "403", + "403description": "Sorry, you do not have permission to access this page", + "404title": "404", + "404description": "Sorry, the page you visited does not exist", + "500title": "500", + "500description": "Sorry, the server is reporting an error", + }, + + editor: { + insertLink: "Insert Link", + linkUrl: "Link URL", + linkText: "Link Text", + linkTextPlaceholder: "Link text", + defaultPlaceholder: "Enter content...", + imageOnly: "Only image files are allowed", + imageSizeLimit: "Image size cannot exceed 5MB", + imageInsertSuccess: "Image inserted successfully", + imageUploadFailed: "Image upload failed", + enterLinkUrl: "Please enter link URL", + }, + + iconPicker: { + selectIcon: "Select icon", + searchPlaceholder: "Search icon name...", + onlineSearchFailed: "Online search failed", + onlineSearchFailedDetail: "Online search failed: {message}", + }, + + captcha: { + clickInOrder: "Click in order: ", + refresh: "Refresh", + }, + + about: { + description: + "A modern admin framework built on Vue 3 + TypeScript + Ant Design Vue. Production-ready, feature-rich, and easy to extend.", + projectInfo: "Project Info", + projectName: "Project Name", + version: "Version", + license: "License", + author: "Author", + email: "Email", + documentation: "Documentation", + techStack: "Tech Stack", + features: "Core Features", + feature1: "Vue 3 Composition API", + feature1Desc: + "Better logic reuse, code organization, and reactive performance", + feature2: "Full TypeScript Strict Mode", + feature2Desc: "Complete type inference to catch errors at development time", + feature3: "Complete RBAC Permission System", + feature3Desc: + "Page, button, field, and API level access control out of the box", + feature4: "Dynamic Routes & Menu Generation", + feature4Desc: "Auto-generate routes and sidebar menus based on user roles", + feature5: "i18n Multi-language Support", + feature5Desc: "Built-in Chinese & English with easy locale extension", + feature6: "Light / Dark Theme Switching", + feature6Desc: "6 preset theme colors with auto system preference detection", + feature7: "ProTable / ProForm Components", + feature7Desc: + "Config-driven tables and forms covering common business scenarios", + feature8: "Mock Data Development Mode", + feature8Desc: + "Built-in mock system for parallel frontend and backend development", + }, + + proForm: { + enterPlaceholder: "Please enter {label}", + selectPlaceholder: "Please select {label}", + uploadFile: "Upload File", + }, + + proUpload: { + uploadFile: "Upload File", + uploadImage: "Upload Image", + dragHint: "Click or drag file to this area to upload", + fileSizeExceed: "File size must not exceed {size}MB", + fileTypeNotAllowed: "File type not allowed", + }, + + proStepForm: { + prev: "Previous", + next: "Next", + }, + + proTable: { + total: "Total {total} items", + density: "Table Density", + checkAll: "Select All", + indexColumn: "Index Column", + fixLeft: "Pin Left", + fixRight: "Pin Right", + densityLarge: "Spacious", + densityMiddle: "Default", + densitySmall: "Compact", + loadDataFailed: "Failed to load data", + }, + + profile: { + title: "Profile", + basicInfo: "Basic Information", + security: "Security", + username: "Username", + email: "Email", + phone: "Phone", + role: "Role", + joinDate: "Join Date", + changePassword: "Change Password", + currentPassword: "Current Password", + oldPassword: "Old Password", + newPassword: "New Password", + confirmPassword: "Confirm Password", + enterCurrentPassword: "Please enter current password", + enterNewPassword: "Please enter new password", + enterConfirmPassword: "Please enter new password again", + passwordMismatch: "Passwords do not match", + passwordMinLength: "Password must be at least 6 characters", + passwordChangeSuccess: "Password changed successfully", + passwordChangeFailed: "Failed to change password", + passwordTip: + "Tip: Password should be at least 6 characters, recommend including letters, numbers and special characters", + updateSuccess: "Update successful", + updateFailed: "Update failed", + }, + + error: { + 404: "Page Not Found", + 403: "Access Forbidden", + 500: "Server Error", + backHome: "Back to Home", + pageNotFound: "Sorry, the page you visited does not exist", + noPermission: "Sorry, you do not have permission to access this page", + serverError: "Sorry, the server is reporting an error", + }, + + validation: { + required: "This field is required", + email: "Please enter a valid email address", + phone: "Please enter a valid phone number", + idCard: "Please enter a valid ID card number", + url: "Please enter a valid URL", + minLength: "Minimum length is {min} characters", + maxLength: "Maximum length is {max} characters", + lengthRange: "Length must be between {min} and {max}", + numberRange: "Value must be between {min} and {max}", + min: "Minimum value is {min}", + max: "Maximum value is {max}", + pattern: "Invalid format", + usernamePattern: + "Username can only contain letters, numbers and underscores", + passwordPattern: + "Password must be at least 8 characters and include letters and numbers", + confirmPassword: "The two passwords do not match", + }, + + dept: { + title: "Department Management", + organizationStructure: "Organization", + searchDept: "Search department", + deptName: "Department Name", + parentDept: "Parent Department", + leader: "Leader", + phone: "Phone", + email: "Email", + sort: "Sort", + remark: "Remark", + status: "Status", + enabled: "Enabled", + disabled: "Disabled", + createDept: "Create Department", + editDept: "Edit Department", + deleteDept: "Delete Department", + addChildDept: "Add Child Department", + childDepts: "Child Departments", + noneTopLevel: "None (Top Level)", + noneTopLevelDept: "None (Top Level Department)", + selectDeptNode: "Please select a department node on the left", + confirmDelete: "Confirm Delete", + confirmDeleteContent: + 'Are you sure you want to delete department "{name}"?', + hasChildrenWarning: + "This department has child departments, please delete them first", + deleteSuccess: "Deleted successfully", + deleteFailed: "Delete failed", + updateSuccess: "Updated successfully", + createSuccess: "Created successfully", + operateFailed: "Operation failed", + pleaseEnterDeptName: "Please enter department name", + pleaseEnterLeader: "Please enter leader", + pleaseEnterPhone: "Please enter phone", + pleaseEnterEmail: "Please enter email", + pleaseEnterRemark: "Please enter remark", + loadDataFailed: "Failed to load department data", + createTime: "Create Time", + updateTime: "Update Time", + }, + + config: { + title: "System Config", + configGroups: "Config Groups", + configName: "Config Name", + configKey: "Config Key", + configValue: "Config Value", + valueType: "Value Type", + group: "Group", + sort: "Sort", + description: "Description", + builtIn: "Source", + createConfig: "Create Config", + editConfig: "Edit Config", + deleteConfig: "Delete Config", + confirmDelete: "Confirm Delete", + confirmDeleteContent: 'Are you sure you want to delete config "{name}"?', + deleteSuccess: "Deleted successfully", + deleteFailed: "Delete failed", + updateSuccess: "Updated successfully", + createSuccess: "Created successfully", + operateFailed: "Operation failed", + requiredFields: "Please fill in required fields", + loadConfigFailed: "Failed to load config", + valueTypes: { + string: "String", + number: "Number", + boolean: "Boolean", + json: "JSON", + }, + groups: { + basic: "Basic Config", + security: "Security Config", + upload: "Upload Config", + notification: "Notification Config", + }, + builtInTypes: { + builtIn: "Built-in", + custom: "Custom", + }, + placeholders: { + configName: "Please enter config name", + configKey: "e.g. site.name", + configValue: "Please enter config value", + jsonFormat: "JSON format", + description: "Please enter description", + }, + }, + + file: { + title: "File Management", + fileName: "File Name", + ext: "Extension", + size: "File Size", + storage: "Storage Type", + uploader: "Uploader", + uploadTime: "Upload Time", + action: "Action", + delete: "Delete", + confirmDelete: "Confirm Delete", + confirmDeleteContent: 'Are you sure you want to delete file "{name}"?', + deleteSuccess: "Deleted successfully", + deleteFailed: "Delete failed", + loadFailed: "Failed to load file list", + storageType: { + local: "Local", + oss: "OSS", + cos: "COS", + }, + extType: { + imageJpg: "Image(jpg)", + imagePng: "Image(png)", + pdf: "PDF", + word: "Word", + excel: "Excel", + zip: "Archive", + video: "Video", + text: "Text", + ppt: "PPT", + svg: "SVG", + }, + }, + + log: { + title: "System Log", + operationLog: "Operation Log", + loginLog: "Login Log", + clearLog: "Clear Log", + confirmClear: "Confirm Clear", + confirmClearOperation: + "Are you sure you want to clear all operation logs? This action cannot be undone.", + confirmClearLogin: + "Are you sure you want to clear all login logs? This action cannot be undone.", + clearSuccess: "Cleared successfully", + clearFailed: "Clear failed", + operationUser: "Operator", + operationModule: "Module", + operationType: "Operation Type", + operationDescription: "Description", + requestMethod: "Method", + ipAddress: "IP Address", + duration: "Duration", + operationTime: "Operation Time", + username: "Username", + browser: "Browser", + os: "OS", + message: "Message", + loginTime: "Login Time", + success: "Success", + fail: "Failed", + actionTypes: { + login: "Login", + logout: "Logout", + create: "Create", + update: "Update", + delete: "Delete", + export: "Export", + import: "Import", + other: "Other", + }, + modules: { + userManagement: "User Management", + roleManagement: "Role Management", + menuManagement: "Menu Management", + dictionary: "Dictionary", + systemLogin: "System Login", + profile: "Profile", + dashboard: "Dashboard", + }, + loadOperationLogFailed: "Failed to load operation logs", + loadLoginLogFailed: "Failed to load login logs", + }, + + "menu.external": "External Pages", + "menu.externalIframe": "IFrame", + "menu.externalLink": "External Links", + "menu.externalTypescript": "TypeScript", + "menu.externalAntdvNext": "Antdv Next", + "menu.externalVite": "Vite", + "menu.externalVue": "Vue.js", + "external.link.openedTitle": "Opened in a new tab", + "external.link.openedSubTitle": + "If the browser blocked the popup, click the button below to open again.", + "external.link.openVite": "Open Vite", + "external.link.openVue": "Open Vue", + + examples: { + scaffold: { + stateCache: { + title: "State & Cache Example", + description: + "Demonstrates Pinia persistence (survives refresh) and keep-alive local caching (survives tab switching).", + piniaSection: "1. Pinia Persisted State", + keywordLabel: "Keyword", + keywordPlaceholder: "Persists after page refresh", + counterLabel: "Counter", + notesLabel: "Notes", + notesPlaceholder: "Supports multiline, auto-persisted", + resetButton: "Reset State", + pinTabButton: "Pin Current Tab", + lastPersistTime: "Last persist time: ", + keepAliveSection: "2. keep-alive Local Cache", + panelA: "Panel A", + panelB: "Panel B", + panelADesc: "Panel A (will not be destroyed when switching)", + panelAInputPlaceholder: + "Input content, switch to B and back - still retained", + localCountLabel: "Local count: ", + panelBDesc: "Panel B (also cached by keep-alive)", + panelBTextPlaceholder: + "Input content, switch tabs and return - still retained", + pinTabSuccess: "Tab pin status toggled", + }, + uploadSystem: { + title: "Upload System Example", + description: + "Drag & drop upload + progress + retry on failure + image preview, ready for business integration.", + uploading: "Uploading", + success: "Success", + failed: "Failed", + dragText: "Click or drag files to this area to upload", + dragHint: + "Supports images and documents. Upload process randomly simulates failures to verify retry logic.", + retryButton: "Retry Failed", + clearButton: "Clear List", + failureRate: "Failure rate: ", + previewTitle: "File Preview", + uploadFailedError: "Upload failed due to network fluctuation", + uploadSuccessMsg: "Upload success: {name}", + uploadFailedMsg: "Upload failed: {name}", + retryMsg: "Retrying {count} failed files", + previewNotSupported: "This file type does not support preview", + }, + importExport: { + title: "Import/Export Flow Example", + description: + "Demonstrates template download, CSV import validation, error receipt export, and current data export.", + downloadTemplate: "Download Template", + importCsv: "Import CSV", + exportCurrent: "Export Current Data", + exportErrorReceipt: "Export Error Receipt", + totalRows: "Total Rows", + successRows: "Successful Rows", + updatedRows: "Updated Rows", + failedRows: "Failed Rows", + importHint: + "Header must be code,name,category,price,stock; rows are upserted by code.", + colCode: "Code", + colName: "Name", + colCategory: "Category", + colPrice: "Price", + colStock: "Stock", + errorRowNo: "Row No.", + errorReason: "Error Reason", + errorRaw: "Raw Data", + emptyFile: "File is empty or has no valid rows", + invalidHeader: "Invalid header, please use the template", + errorRequired: "Required fields missing (code/name/category)", + errorPrice: "Price must be a number greater than or equal to 0", + errorStock: "Stock must be an integer greater than or equal to 0", + importDone: "Import finished: {success} success, {failed} failed", + parseFailed: "CSV parse failed, please check file format", + }, + testing: { + title: "Testing Example", + description: + "Provides recommended templates for unit tests and e2e tests, ready to copy for new modules.", + alertMessage: + "Vitest / Playwright dependencies are not installed yet. This page provides structure and examples.", + unitTestTitle: "Unit Test Template (Vitest)", + e2eTestTitle: "End-to-End Test Template (Playwright)", + implementationTitle: "Implementation Sequence", + step1Title: "Add unit tests first", + step1Description: + "Cover core functions, store computation logic, and edge cases.", + step2Title: "Then add e2e tests", + step2Description: + "Cover critical user paths like login, search, and list operations.", + step3Title: "Integrate with CI", + step3Description: + "Chain type-check + unit + e2e into pipeline, execute automatically before merge.", + }, + proTableAdvanced: { + title: "ProTable Advanced Example", + description: + "Server-side pagination simulation + batch operations + inline editing + export", + selectedCount: "{count} items selected", + batchDisable: "Batch Disable", + batchDelete: "Batch Delete", + export: "Export Current Data", + statusActive: "Active", + statusInactive: "Inactive", + username: "Username", + realName: "Real Name", + email: "Email", + gender: "Gender", + status: "Status", + createdAt: "Created At", + editSimulation: "Simulate edit: {username}", + deleteConfirm: "Confirm to delete this row?", + deleteSuccess: "Delete successful", + statusChangeSuccess: "{status} {username}", + batchSetStatusSuccess: "Batch set status for {count} items", + batchDeleteTitle: "Batch Delete Confirmation", + batchDeleteContent: "Confirm to delete the selected {count} rows?", + batchDeleteSuccess: "Batch delete completed", + exportSuccess: "CSV exported successfully", + }, + complexForm: { + title: "Complex Form Example", + description: + "Step form + dynamic policy rules + async validation + draft save + server-side field error mapping.", + step1Title: "Basic Info", + step2Title: "Policy Configuration", + step3Title: "Publish Settings", + projectNameLabel: "Project Name", + projectNamePlaceholder: "Enter project name", + projectNameRequired: "Please enter project name", + projectNameExists: "Project name already exists, please change", + ownerLabel: "Owner", + ownerPlaceholder: "Enter owner", + ownerRequired: "Please enter owner", + sceneLabel: "Scene", + scenePlaceholder: "Select scene", + sceneRequired: "Please select scene", + sceneGrowth: "User Growth", + sceneRisk: "Risk Control", + sceneStability: "Stability Monitoring", + descriptionLabel: "Description", + descriptionPlaceholder: "Enter additional description", + addRuleButton: "Add Policy Rule", + currentRulesCount: "Current {count} rules", + metricPlaceholder: "Metric name, e.g., error_rate", + deleteButton: "Delete", + ruleListEmpty: "Please add at least one policy rule", + ruleListIncomplete: "Policy rules have unfilled items, please complete", + publishTypeLabel: "Publish Type", + publishTypeRequired: "Please select publish type", + publishImmediate: "Immediate", + publishSchedule: "Scheduled", + publishTimeLabel: "Publish Time", + publishTimeRequired: "Scheduled publish must select publish time", + notifyUsersLabel: "Notify Users", + notifyUsersPlaceholder: "Enter username and press Enter", + prevButton: "Previous", + nextButton: "Next", + submitButton: "Submit", + saveDraftButton: "Save Draft", + resetButton: "Reset", + draftSaved: "Draft saved", + serverValidationError: + 'Server validation failed: project name cannot contain "fail"', + submitFailed: "Submit failed, server field error mapped", + submitSuccess: "Submit successful", + }, + advancedFilter: { + title: "Advanced Filter Builder Example", + description: + "Build filter rules with visual conditions (AND/OR), and save reusable filter schemes.", + tips: "Supports string, enum, number, and date fields for most list filtering scenarios.", + addCondition: "Add Condition", + saveScheme: "Save Scheme", + matchedCount: "{count} matched", + emptyConditions: "No filter conditions", + inputValue: "Enter value", + selectValue: "Select value", + secondValue: "Second value", + savedSchemes: "Saved schemes:", + noSchemes: "None", + schemeNamePlaceholder: "Enter scheme name (max 30 chars)", + schemeNameRequired: "Please enter scheme name", + saveSuccess: "Filter scheme saved", + score: "Score", + statusActive: "Active", + statusInactive: "Inactive", + statusPending: "Pending", + adminRole: "Admin", + operatorRole: "Operator", + auditorRole: "Auditor", + opContains: "Contains", + opEquals: "Equals", + opNotEquals: "Not equals", + opIn: "In", + opGt: "Greater than", + opGte: "Greater or equal", + opLt: "Less than", + opLte: "Less or equal", + opBetween: "Between", + opBefore: "Before", + opAfter: "After", + }, + virtualTable: { + title: "Virtual Scroll Table Example", + description: + "Demonstrates smooth rendering of large data sets using native a-table virtual scroll.", + tipsNativeVirtual: + "Built with antdv-next native a-table + virtual, no extra virtual list library required.", + datasetSize: "Dataset size", + regenerate: "Regenerate Data", + regenerateSuccess: "{count} rows generated", + searchPlaceholder: "Search username / email / department", + allStatus: "All Status", + totalRows: "Total {count}", + filteredRows: "Filtered {count}", + renderedRowsTip: + "Only visible rows are rendered for smoother scrolling", + statusActive: "Active", + statusInactive: "Inactive", + statusPending: "Pending", + colId: "ID", + colUsername: "Username", + colEmail: "Email", + colDepartment: "Department", + colStatus: "Status", + colUpdatedAt: "Updated At", + }, + masterDetail: { + title: "Master-Detail Example", + description: + "Simulates ticket master-slave page: select from list on left, view details and operation history in Drawer on right.", + drawerTitle: "Ticket Details", + ticketNumber: "Ticket No.", + titleLabel: "Title", + ownerLabel: "Owner", + priorityLabel: "Priority", + createdAtLabel: "Created At", + descTab: "Description", + logsTab: "Operation Logs", + statusOpen: "Open", + statusProcessing: "Processing", + statusClosed: "Closed", + ticketTitle: "Order Risk Alert #{index}", + ownerZhang: "Zhang", + ownerLi: "Li", + ticketDescription: + "This is the detailed description of ticket {index}, including background information, impact scope, and recommended actions.", + actionCreate: "Create Ticket", + operatorSystem: "System", + actionAssign: "Assign Owner", + operatorDispatch: "Dispatch Center", + colTicketNumber: "Ticket No.", + colTitle: "Title", + colOwner: "Owner", + colPriority: "Priority", + colStatus: "Status", + colCreatedAt: "Created At", + }, + rbac: { + title: "RBAC Full-Chain Example", + description: + "Covers 4 dimensions: page permission, button permission, field permission, and API permission. Switch between admin / user to observe differences.", + currentSession: "Current Session", + accountInfo: "Account: {username} | Role: {role}", + switchToAdmin: "Switch to admin", + switchToUser: "Switch to user", + permissionTotal: "...total {count} items", + section1Title: "1. Page Permission Check", + checkUserManage: "User management page access (system.user.view)", + checkMenuManage: "Menu management page access (system.permission.view)", + checkAdminRole: "Admin role access (admin)", + passed: "Passed", + denied: "Denied", + section2Title: "2. Button Permission", + createUserButton: "Create User", + editUserButton: "Edit User", + deleteUserButton: "Delete User", + buttonPermissionHint: + "Hint: Button rendering is controlled by PermissionButton", + section3Title: "3. Field Permission (Masking)", + phoneLabel: "Phone:", + emailLabel: "Email:", + realNameLabel: "Real Name:", + section4Title: "4. API Permission Fallback", + callViewApi: "Call View API", + callExportApi: "Call Export API", + callDeleteApi: "Call Delete API", + viewUserAction: "View user list", + exportUserAction: "Export users", + deleteUserAction: "Delete user", + switchSuccess: "Switched to {username}", + switchFailed: "Switch failed", + missingPermission: "403: Missing permission {permission}", + apiSuccess: "{action} successful", + apiFailed: "{action} failed: {error}", + noPermission: "No permission", + }, + observability: { + title: "Observability & Exception Example", + description: + "Unified handling of loading, empty, and error states with error classification, logging, and one-click retry.", + simulateSuccess: "Simulate Success", + simulateEmpty: "Simulate Empty", + simulateNetwork: "Simulate Network Error", + simulateAuth: "Simulate Auth Error", + simulateBusiness: "Simulate Business Error", + requestStateTitle: "Request State View", + emptyData: "No data to display", + requestFailed: "Request Failed", + retryButton: "Retry", + clickToStart: "Click button above to start simulation", + errorLogTitle: "Error Classification & Event Log", + networkError: "Network Error", + authError: "Auth Error", + businessError: "Business Error", + noEvents: "No events yet", + errorNetwork: + "NetworkError: Request timeout, please check network connection", + errorAuth: "AuthError: token expired, need to re-login", + errorBusiness: + "BusinessError: rule configuration conflict, cannot calculate", + eventStart: "Start simulating scenario: {scenario}", + eventEmpty: "Request successful but returned empty data", + eventSuccess: "Request successful and returned data", + unknownError: "Unknown error", + eventError: "Request failed ({type}): {message}", + }, + requestAuth: { + title: "Request & Auth Loop Example", + description: + "Demonstrates queued refresh mechanism when concurrent requests trigger 401, and fallback to re-login after refresh failure.", + refreshFailedAlert: "Refresh failed, entered re-login state", + refreshFailedDesc: + 'Subsequent requests will continue to fail. Click "Reset Session" to make new requests.', + accessToken: "Access Token", + refreshToken: "Refresh Token", + refreshStatus: "Refresh Status", + empty: "Empty", + refreshing: "Refreshing", + idle: "Idle", + singleRequest: "Single Request", + concurrentRequest: "5 Concurrent Requests", + expireToken: "Expire Token", + simulateRefreshFail: "Simulate Refresh Failure", + resetSession: "Reset Session", + logTitle: "Event Log (Last 80 entries)", + clearLog: "Clear Log", + noLogs: "No logs yet", + tokenExpired: "[{apiName}] token expired", + apiSuccess: "[{apiName}] request successful", + refreshTokenInvalid: "refresh token invalid", + logRefreshStart: + "Trigger token refresh (only first 401 request executes)", + logRefreshSuccess: + "Token refresh successful, releasing queued requests", + logRefreshFailed: + "Token refresh failed: {message}, entering re-login state", + logQueueWait: "Refresh in progress detected, request queued", + logNon401Error: "[{apiName}] non-401 error: {message}", + log401Detected: "[{apiName}] 401 detected, preparing to refresh token", + logTokenExpired: "Manually marked access token as expired", + logSessionReset: "Session reset, ready for new requests", + singleRequestFailed: "Single request failed", + logConcurrentStart: + "Starting 5 concurrent requests, observe refresh queue behavior", + concurrentPartialFail: "Concurrent requests completed, {count} failed", + concurrentAllSuccess: "All concurrent requests successful", + logRefreshWillFail: "Next refresh will be forced to fail", + refreshFailTriggered: "Refresh failure scenario triggered", + }, + }, + jsonInput: { + title: "JSON Input Example", + description: + "A powerful JSON input component that supports both form and raw JSON editing modes. It can handle nested objects, arrays, and various data types.", + basicUsage: "Basic Usage", + userConfig: "User Configuration", + clickToEdit: "Click to edit JSON", + editUserConfig: "Edit User Configuration", + displayValue: "Display Value (using displayKey)", + productName: "Product Name", + price: "Price", + stock: "Stock", + productDescription: "Description", + selectProduct: "Select Product", + advancedUsage: "Advanced Usage", + withI18nKeys: "Key Internationalization Support", + i18nKeysHint: "Use label-map prop to provide i18n labels for keys", + withDisabledFields: "With Disabled Fields", + apiKey: "API Key", + endpoint: "Endpoint", + timeout: "Timeout (seconds)", + systemConfig: "System Configuration", + nestedObject: "Nested Object Support", + userInfo: "User Info", + name: "Name", + settings: "Settings", + theme: "Theme", + language: "Language", + nestedData: "Nested Data Structure", + emptyObject: "Empty Object (Create New)", + createNew: "Create New Configuration", + }, + i18nInput: { + description: + "Internationalized input component supporting multi-language content editing. Built on top of JsonInput, it automatically generates form fields based on system-supported languages.", + productName: "Product Name (Multi-language)", + productDescription: "Product Description (Multi-language)", + editProductName: "Edit Product Name", + editProductDesc: "Edit Product Description", + clickToEdit: "Click to edit multi-language content", + stringFormat: "String Format Value", + stringFormatHint: + "Supports JSON in string format, component will automatically parse and serialize", + currentLocale: "Specify Display Locale", + currentLocaleHint: + "Use the locale prop to specify which language value to display in the input", + emptyValue: "Empty Value (Auto-initialize)", + dataPreview: "Data Preview", + valueType: "Value Type Toggle", + showAsString: "Show as String", + showAsObject: "Show as Object", + stringValue: "String Format", + objectValue: "Object Format", + }, + codeEditor: { + title: "Code Editor Example", + description: + "Code editor component based on CodeMirror 6, supporting 14+ language syntax highlighting, JSON formatting, theme switching and more.", + jsonEditor: "JSON Editor", + jsEditor: "JavaScript Editor", + multiLanguage: "Multi-language Switching", + readonlyMode: "Read-only Preview Mode", + darkTheme: "Theme Switching", + themePreview: "Theme Preview", + themeAuto: "Follow System", + themeLight: "Light", + themeDark: "Dark", + autoHeight: "Auto Height", + format: "Format", + minify: "Minify", + copy: "Copy", + language: "Language", + theme: "Theme", + outputPreview: "Output Preview", + }, + }, +}; diff --git a/antdv-next-admin/src/locales/index.ts b/antdv-next-admin/src/locales/index.ts new file mode 100644 index 0000000..ba1c726 --- /dev/null +++ b/antdv-next-admin/src/locales/index.ts @@ -0,0 +1,64 @@ +import { createI18n } from "vue-i18n"; + +import enUS from "./en-US"; +import jaJP from "./ja-JP"; +import koKR from "./ko-KR"; +import zhCN from "./zh-CN"; + +export const LOCALE_MESSAGES = { + "zh-CN": zhCN, + "en-US": enUS, + "ja-JP": jaJP, + "ko-KR": koKR, +}; + +export const SUPPORTED_LOCALES = Object.keys(LOCALE_MESSAGES) as string[]; + +export const LOCALE_NATIVE_LABELS: Record = { + "zh-CN": "简体中文", + "en-US": "English", + "ja-JP": "日本語", + "ko-KR": "한국어", +}; + +// Get saved locale or use default +const savedLocale = localStorage.getItem("app-locale") || "zh-CN"; + +const i18n = createI18n({ + legacy: false, + locale: savedLocale, + fallbackLocale: "zh-CN", + messages: LOCALE_MESSAGES, + globalInjection: true, +}); + +document.documentElement.lang = savedLocale; + +type TranslateLike = (key: string, ...args: unknown[]) => unknown; + +/** + * Global i18n translate helper + * Usage: + * - template: {{ $t('common.search') }} (from globalInjection) + * - + + diff --git a/antdv-next-admin/src/views/dashboard/index.vue b/antdv-next-admin/src/views/dashboard/index.vue new file mode 100644 index 0000000..8b5df36 --- /dev/null +++ b/antdv-next-admin/src/views/dashboard/index.vue @@ -0,0 +1,492 @@ + + + + + diff --git a/antdv-next-admin/src/views/error/403.vue b/antdv-next-admin/src/views/error/403.vue new file mode 100644 index 0000000..a4c71f4 --- /dev/null +++ b/antdv-next-admin/src/views/error/403.vue @@ -0,0 +1,26 @@ + + + \ No newline at end of file diff --git a/antdv-next-admin/src/views/error/404.vue b/antdv-next-admin/src/views/error/404.vue new file mode 100644 index 0000000..71aabd9 --- /dev/null +++ b/antdv-next-admin/src/views/error/404.vue @@ -0,0 +1,26 @@ + + + \ No newline at end of file diff --git a/antdv-next-admin/src/views/error/500.vue b/antdv-next-admin/src/views/error/500.vue new file mode 100644 index 0000000..b8eb2f8 --- /dev/null +++ b/antdv-next-admin/src/views/error/500.vue @@ -0,0 +1,26 @@ + + + \ No newline at end of file diff --git a/antdv-next-admin/src/views/examples/captcha/index.vue b/antdv-next-admin/src/views/examples/captcha/index.vue new file mode 100644 index 0000000..503abef --- /dev/null +++ b/antdv-next-admin/src/views/examples/captcha/index.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/antdv-next-admin/src/views/examples/code-editor/index.vue b/antdv-next-admin/src/views/examples/code-editor/index.vue new file mode 100644 index 0000000..6654b82 --- /dev/null +++ b/antdv-next-admin/src/views/examples/code-editor/index.vue @@ -0,0 +1,319 @@ + + + + + \ No newline at end of file diff --git a/antdv-next-admin/src/views/examples/color-picker/index.vue b/antdv-next-admin/src/views/examples/color-picker/index.vue new file mode 100644 index 0000000..d5da291 --- /dev/null +++ b/antdv-next-admin/src/views/examples/color-picker/index.vue @@ -0,0 +1,327 @@ + + + + + \ No newline at end of file diff --git a/antdv-next-admin/src/views/examples/editor/index.vue b/antdv-next-admin/src/views/examples/editor/index.vue new file mode 100644 index 0000000..85b3598 --- /dev/null +++ b/antdv-next-admin/src/views/examples/editor/index.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/antdv-next-admin/src/views/examples/exception/403.vue b/antdv-next-admin/src/views/examples/exception/403.vue new file mode 100644 index 0000000..717d9ee --- /dev/null +++ b/antdv-next-admin/src/views/examples/exception/403.vue @@ -0,0 +1,23 @@ + + + \ No newline at end of file diff --git a/antdv-next-admin/src/views/examples/exception/404.vue b/antdv-next-admin/src/views/examples/exception/404.vue new file mode 100644 index 0000000..6fd232e --- /dev/null +++ b/antdv-next-admin/src/views/examples/exception/404.vue @@ -0,0 +1,23 @@ + + + \ No newline at end of file diff --git a/antdv-next-admin/src/views/examples/exception/500.vue b/antdv-next-admin/src/views/examples/exception/500.vue new file mode 100644 index 0000000..415d683 --- /dev/null +++ b/antdv-next-admin/src/views/examples/exception/500.vue @@ -0,0 +1,23 @@ + + + \ No newline at end of file diff --git a/antdv-next-admin/src/views/examples/external/iframe/antdv-next.vue b/antdv-next-admin/src/views/examples/external/iframe/antdv-next.vue new file mode 100644 index 0000000..cb01198 --- /dev/null +++ b/antdv-next-admin/src/views/examples/external/iframe/antdv-next.vue @@ -0,0 +1,19 @@ +