diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 0000000..c0f1d02
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,21 @@
+module.exports = {
+ root: true,
+ env: { browser: true, es2020: true },
+ extends: [
+ 'eslint:recommended',
+ 'plugin:react/recommended',
+ 'plugin:react/jsx-runtime',
+ 'plugin:react-hooks/recommended',
+ ],
+ ignorePatterns: ['dist', '.eslintrc.cjs'],
+ parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
+ settings: { react: { version: '18.2' } },
+ plugins: ['react-refresh'],
+ rules: {
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ 'react/prop-types': 'off',
+ },
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d37e384
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,39 @@
+# 依赖文件
+node_modules/
+.pnp
+.pnp.js
+
+# 构建产物
+dist/
+build/
+*.local
+
+# 日志
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+# 编辑器
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+# 环境变量
+.env
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# 临时文件
+.cache
+.temp
+*.tmp
diff --git a/DESIGN_GUIDE.md b/DESIGN_GUIDE.md
new file mode 100644
index 0000000..231a221
--- /dev/null
+++ b/DESIGN_GUIDE.md
@@ -0,0 +1,607 @@
+# Nex Design 设计规范指南
+
+> 面向 React + Ant Design + Tailwind CSS 的前端设计语言规范
+
+## 目录
+
+- [概述](#概述)
+- [设计原则](#设计原则)
+- [颜色系统](#颜色系统)
+- [排版规范](#排版规范)
+- [间距系统](#间距系统)
+- [组件规范](#组件规范)
+- [布局规范](#布局规范)
+- [交互规范](#交互规范)
+- [响应式设计](#响应式设计)
+- [页面模板](#页面模板)
+
+---
+
+## 概述
+
+Nex Design 是为开发团队打造的一套标准化设计语言系统,旨在提供统一、高效、易维护的前端设计规范。
+
+### 技术栈
+
+- **框架**: React 18+
+- **组件库**: Ant Design 5.x
+- **样式方案**: Tailwind CSS 3.x
+- **包管理**: Yarn
+- **运行时**: Node.js 16+
+
+### 设计目标
+
+1. **一致性**: 确保所有页面和组件保持视觉与交互的一致性
+2. **高效性**: 提供可复用的设计模式,加快开发速度
+3. **可维护性**: 建立清晰的规范体系,降低维护成本
+4. **用户体验**: 优先考虑用户体验,打造直观易用的界面
+
+---
+
+## 设计原则
+
+### 1. 清晰明确
+界面设计应当清晰直观,避免歧义,让用户能够快速理解和操作。
+
+### 2. 一致性优先
+保持视觉、交互、用词的一致性,减少用户学习成本。
+
+### 3. 效率至上
+优化操作流程,减少用户的操作步骤,提高工作效率。
+
+### 4. 反馈及时
+对用户的每一个操作都应给予明确的反馈,包括成功、失败、加载等状态。
+
+### 5. 容错友好
+预防用户错误,在错误发生时提供清晰的提示和解决方案。
+
+---
+
+## 颜色系统
+
+### 主色调
+
+```css
+/* 品牌主色 - Primary (基于 NEX Logo 紫红色) */
+--primary-50: #fce7f6;
+--primary-100: #f5bae6;
+--primary-200: #ee8dd6;
+--primary-300: #e760c6;
+--primary-400: #e033b6;
+--primary-500: #b8178d; /* 主色 - 匹配 NEX Logo */
+--primary-600: #9c1477;
+--primary-700: #801161;
+--primary-800: #640d4b;
+--primary-900: #480a35;
+```
+
+### 辅助色系
+
+```css
+/* 蓝色 - Blue (用于信息提示) */
+--blue-50: #e6f4ff;
+--blue-100: #bae0ff;
+--blue-200: #91caff;
+--blue-300: #69b1ff;
+--blue-400: #4096ff;
+--blue-500: #1677ff; /* 信息色 */
+--blue-600: #0958d9;
+--blue-700: #003eb3;
+--blue-800: #002c8c;
+--blue-900: #001d66;
+```
+
+### 功能色
+
+```css
+/* 成功 - Success */
+--success: #52c41a;
+--success-bg: #f6ffed;
+--success-border: #b7eb8f;
+
+/* 警告 - Warning */
+--warning: #faad14;
+--warning-bg: #fffbe6;
+--warning-border: #ffe58f;
+
+/* 错误 - Error */
+--error: #ff4d4f;
+--error-bg: #fff2f0;
+--error-border: #ffccc7;
+
+/* 信息 - Info */
+--info: #1677ff;
+--info-bg: #e6f4ff;
+--info-border: #91caff;
+```
+
+### 中性色
+
+```css
+/* 文本颜色 */
+--text-primary: rgba(0, 0, 0, 0.88); /* 主要文本 */
+--text-secondary: rgba(0, 0, 0, 0.65); /* 次要文本 */
+--text-tertiary: rgba(0, 0, 0, 0.45); /* 辅助文本 */
+--text-disabled: rgba(0, 0, 0, 0.25); /* 禁用文本 */
+
+/* 背景颜色 */
+--bg-primary: #ffffff;
+--bg-secondary: #fafafa;
+--bg-tertiary: #f5f5f5;
+--bg-disabled: #f0f0f0;
+
+/* 边框颜色 */
+--border-primary: #d9d9d9;
+--border-secondary: #f0f0f0;
+```
+
+### 颜色使用规范
+
+1. **主色使用**: 主要用于关键操作按钮、重要信息高亮、链接等
+2. **功能色使用**: 严格按照语义使用,不可混淆
+3. **中性色使用**: 用于文本、背景、边框等基础元素
+4. **对比度**: 确保文本与背景的对比度符合 WCAG 2.0 标准(至少 4.5:1)
+
+---
+
+## 排版规范
+
+### 字体家族
+
+```css
+/* 默认字体栈 */
+font-family: -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: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code',
+ 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', monospace;
+```
+
+### 字号规范
+
+| 用途 | 字号 | 行高 | Tailwind Class | 使用场景 |
+|------|------|------|----------------|----------|
+| 特大标题 | 32px | 1.35 | `text-4xl` | 页面主标题 |
+| 大标题 | 24px | 1.35 | `text-2xl` | 区块标题 |
+| 中标题 | 20px | 1.4 | `text-xl` | 卡片标题 |
+| 小标题 | 16px | 1.5 | `text-base` | 表单标签 |
+| 正文 | 14px | 1.5714 | `text-sm` | 正文内容 |
+| 辅助文字 | 12px | 1.6667 | `text-xs` | 说明文字 |
+
+### 字重规范
+
+- **Regular (400)**: 正文内容
+- **Medium (500)**: 表单标签、列表项
+- **Semibold (600)**: 小标题、强调文本
+- **Bold (700)**: 标题、重要信息
+
+### 文本颜色使用
+
+```jsx
+// 主要文本
+
主要内容
+
+// 次要文本
+次要内容
+
+// 辅助文本
+辅助说明
+
+// 禁用文本
+禁用状态
+```
+
+---
+
+## 间距系统
+
+### 基础间距单位
+
+基于 **8px** 网格系统,所有间距应为 8 的倍数。
+
+| 名称 | 数值 | Tailwind Class | 用途 |
+|------|------|----------------|------|
+| xs | 4px | `space-1` / `p-1` / `m-1` | 紧凑间距 |
+| sm | 8px | `space-2` / `p-2` / `m-2` | 小间距 |
+| md | 16px | `space-4` / `p-4` / `m-4` | 标准间距 |
+| lg | 24px | `space-6` / `p-6` / `m-6` | 大间距 |
+| xl | 32px | `space-8` / `p-8` / `m-8` | 超大间距 |
+| 2xl | 48px | `space-12` / `p-12` / `m-12` | 区块间距 |
+
+### 间距使用场景
+
+1. **组件内边距**: 通常使用 12px (p-3) 或 16px (p-4)
+2. **组件外边距**: 标准使用 16px (m-4) 或 24px (m-6)
+3. **区块间距**: 使用 32px (mb-8) 或 48px (mb-12)
+4. **栅格间距**: 标准使用 16px 或 24px
+
+---
+
+## 组件规范
+
+### 按钮 (Button)
+
+#### 类型与场景
+
+```jsx
+import { Button } from 'antd';
+
+// 主要按钮 - 用于主要操作
+
+
+// 次要按钮 - 用于次要操作
+
+
+// 文本按钮 - 用于辅助操作
+
+
+// 链接按钮 - 用于跳转
+
+
+// 危险按钮 - 用于删除等危险操作
+
+```
+
+#### 尺寸规范
+
+- **Large**: 高度 40px,用于页面主要操作
+- **Middle**: 高度 32px,默认尺寸
+- **Small**: 高度 24px,用于紧凑场景
+
+#### 使用规范
+
+1. 一个操作区域最多只有一个主要按钮
+2. 按钮文字应简洁明确,建议不超过 4 个字
+3. 危险操作必须使用二次确认
+4. 按钮组内按钮间距为 8px
+
+### 表单 (Form)
+
+#### 布局规范
+
+```jsx
+import { Form, Input } from 'antd';
+
+
+
+
+
+```
+
+#### 表单规范
+
+1. **标签对齐**: 默认使用垂直布局 (vertical)
+2. **必填标识**: 使用红色星号 (*) 标识
+3. **字段宽度**: 根据内容长度设置合理宽度
+4. **错误提示**: 实时验证,错误信息显示在字段下方
+5. **表单间距**: 表单项之间间距 24px
+
+### 表格 (Table)
+
+#### 基础配置
+
+```jsx
+import { Table } from 'antd';
+
+ `共 ${total} 条`,
+ }}
+ scroll={{ x: 1200 }}
+/>
+```
+
+#### 表格规范
+
+1. **分页**: 默认每页 10 条,提供分页器
+2. **行高**: 标准行高 54px (middle 模式)
+3. **操作列**: 固定在右侧,宽度根据操作数量调整
+4. **空状态**: 使用统一的空状态提示
+5. **加载状态**: 使用 loading 属性显示加载状态
+
+### 卡片 (Card)
+
+```jsx
+import { Card } from 'antd';
+
+更多}
+ className="mb-4"
+>
+ 卡片内容
+
+```
+
+#### 卡片规范
+
+1. **内边距**: 标准 24px
+2. **圆角**: 8px (rounded-lg)
+3. **阴影**: 默认使用 `shadow-sm`
+4. **间距**: 卡片之间间距 16px
+
+---
+
+## 布局规范
+
+### 页面布局结构
+
+```
+┌─────────────────────────────────────┐
+│ Header (64px) │
+├─────────────────────────────────────┤
+│ Sider │ Content Area │
+│ (200px)│ │
+│ │ │
+│ │ │
+└─────────────────────────────────────┘
+```
+
+### 栅格系统
+
+采用 24 栏栅格系统,基于 Ant Design Grid 组件。
+
+```jsx
+import { Row, Col } from 'antd';
+
+
+
+ 内容
+
+
+```
+
+### 布局规范
+
+1. **页面内边距**: 24px
+2. **内容最大宽度**: 1200px (根据实际需求调整)
+3. **侧边栏宽度**: 200px (收起后 64px)
+4. **顶部导航高度**: 64px
+5. **栅格间距**: 水平 16px,垂直 16px
+
+---
+
+## 交互规范
+
+### 反馈
+
+#### 全局提示 (Message)
+
+```jsx
+import { message } from 'antd';
+
+// 成功提示
+message.success('操作成功');
+
+// 错误提示
+message.error('操作失败,请重试');
+
+// 警告提示
+message.warning('请注意数据安全');
+
+// 加载提示
+const hide = message.loading('加载中...');
+```
+
+#### 通知提醒 (Notification)
+
+```jsx
+import { notification } from 'antd';
+
+notification.open({
+ message: '系统通知',
+ description: '您有新的消息,请及时查看',
+ duration: 4.5,
+});
+```
+
+#### 模态对话框 (Modal)
+
+```jsx
+import { Modal } from 'antd';
+
+// 确认对话框
+Modal.confirm({
+ title: '确认删除',
+ content: '删除后数据无法恢复,确定要删除吗?',
+ okText: '确定',
+ cancelText: '取消',
+ onOk() {
+ // 处理确认
+ },
+});
+```
+
+### 加载状态
+
+1. **局部加载**: 使用 Spin 组件
+2. **按钮加载**: 设置 loading 属性
+3. **页面加载**: 骨架屏 (Skeleton)
+4. **表格加载**: Table 的 loading 属性
+
+### 动画效果
+
+1. **过渡时间**: 标准 300ms
+2. **缓动函数**: ease-in-out
+3. **使用场景**: 展开/收起、显示/隐藏、页面切换
+
+---
+
+## 响应式设计
+
+### 断点定义
+
+| 断点 | 屏幕宽度 | 设备类型 | Tailwind 前缀 |
+|------|----------|----------|---------------|
+| xs | < 576px | 手机竖屏 | - |
+| sm | ≥ 576px | 手机横屏 | `sm:` |
+| md | ≥ 768px | 平板 | `md:` |
+| lg | ≥ 992px | 桌面显示器 | `lg:` |
+| xl | ≥ 1200px | 大桌面显示器 | `xl:` |
+| 2xl | ≥ 1600px | 超大显示器 | `2xl:` |
+
+### 响应式策略
+
+1. **移动优先**: 先设计移动端,再扩展到桌面端
+2. **弹性布局**: 使用 Flexbox 和 Grid
+3. **自适应图片**: 使用相对单位和 max-width
+4. **触摸友好**: 移动端可点击区域不小于 44x44px
+
+---
+
+## 页面模板
+
+### 通用页面结构
+
+```jsx
+import { Layout, Breadcrumb } from 'antd';
+const { Content } = Layout;
+
+function PageTemplate() {
+ return (
+
+ {/* 面包屑导航 */}
+
+ 首页
+ 当前页面
+
+
+ {/* 页面标题区 */}
+
+
+ {/* 主要内容区 */}
+
+ {/* 页面内容 */}
+
+
+ );
+}
+```
+
+### 已实现的页面模板
+
+#### 1. 主框架页面 ✓
+
+完整的应用框架布局,包含:
+- 侧边菜单栏(支持收起/展开,两级菜单)
+- 顶部导航栏(搜索、消息、用户信息)
+- 内容区域(可滚动)
+
+**详细文档**: [主框架页面设计规范](../docs/pages/main-layout.md)
+
+**主要特性**:
+- 基于 NEX Logo 的品牌配色 (#b8178d)
+- 菜单数据 JSON 配置
+- 响应式布局
+- 徽章系统(HOT/NEW)
+- 用户下拉菜单
+
+**使用示例**:
+```jsx
+import MainLayout from './components/MainLayout'
+
+function App() {
+ return (
+
+ {/* 页面内容 */}
+
+ )
+}
+```
+
+#### 2. 概览页 (Dashboard) ✓
+
+数据概览页面,展示:
+- 统计卡片(证书总量、资产数量等)
+- 环形进度图表
+- 数据走势图
+
+**主要组件**:
+- 响应式栅格布局 (Row/Col)
+- 统计卡片 (Statistic)
+- 进度条 (Progress)
+- 图表区域
+
+### 待完善的页面模板
+
+后续将添加以下页面模板:
+
+- [ ] **列表页**: 数据表格、筛选、操作
+- [ ] **详情页**: 信息展示、关联数据
+- [ ] **表单页**: 数据录入、验证、提交
+- [ ] **设置页**: 配置管理、偏好设置
+
+---
+
+## 开发规范
+
+### 代码组织
+
+```
+src/
+├── components/ # 公共组件
+│ ├── Button/
+│ ├── Card/
+│ └── ...
+├── pages/ # 页面组件
+│ ├── Dashboard/
+│ ├── List/
+│ └── ...
+├── styles/ # 样式文件
+│ ├── globals.css
+│ └── variables.css
+├── utils/ # 工具函数
+└── constants/ # 常量定义
+```
+
+### 命名规范
+
+1. **组件命名**: 大驼峰 (PascalCase),如 `UserList`
+2. **文件命名**: 与组件同名,如 `UserList.jsx`
+3. **样式类命名**: 小写短横线 (kebab-case)
+4. **常量命名**: 全大写下划线 (UPPER_SNAKE_CASE)
+
+### CSS 使用规范
+
+1. **优先使用 Tailwind**: 布局、间距、颜色等
+2. **Ant Design 定制**: 通过主题配置实现
+3. **自定义样式**: 仅在必要时使用,放在组件目录下
+
+---
+
+## 版本记录
+
+| 版本 | 日期 | 说明 |
+|------|------|------|
+| 1.0.0 | 2024-11-04 | 初始版本,建立基础设计规范 |
+| 1.1.0 | 2024-11-04 | 更新品牌配色,完成主框架页面和概览页 |
+
+---
+
+## 参考资源
+
+- [Ant Design 官方文档](https://ant.design/)
+- [Tailwind CSS 官方文档](https://tailwindcss.com/)
+- [React 官方文档](https://react.dev/)
+- [Material Design 设计指南](https://material.io/design)
+
+---
+
+**维护者**: Nex Design Team
+**最后更新**: 2024-11-04
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..686f158
--- /dev/null
+++ b/README.md
@@ -0,0 +1,146 @@
+# Nex Design
+
+> 面向 React + Ant Design + Tailwind CSS 的前端设计语言规范
+
+## 项目简介
+
+Nex Design 是为开发团队打造的一套标准化设计语言系统,提供统一、高效、易维护的前端设计规范和页面模板。
+
+## 技术栈
+
+- **框架**: React 18+
+- **构建工具**: Vite 5.x
+- **组件库**: Ant Design 5.x
+- **样式方案**: Tailwind CSS 3.x
+- **路由**: React Router v6
+- **包管理**: Yarn
+- **运行时**: Node.js 16+
+
+## 快速开始
+
+### 环境要求
+
+- Node.js >= 16.0.0
+- Yarn >= 1.22.0
+
+### 安装依赖
+
+```bash
+yarn install
+```
+
+### 开发模式
+
+```bash
+yarn dev
+```
+
+访问 http://localhost:5173 查看项目
+
+### 构建生产版本
+
+```bash
+yarn build
+```
+
+### 预览生产版本
+
+```bash
+yarn preview
+```
+
+## 项目结构
+
+```
+Nex Design/
+├── docs/ # 文档目录
+│ └── pages/ # 页面设计文档
+├── public/ # 静态资源
+├── src/ # 源代码
+│ ├── assets/ # 资源文件(图片、字体等)
+│ ├── components/ # 公共组件
+│ ├── pages/ # 页面组件
+│ ├── styles/ # 全局样式
+│ ├── utils/ # 工具函数
+│ └── constants/ # 常量定义
+├── DESIGN_GUIDE.md # 设计规范指南
+├── package.json # 项目配置
+└── README.md # 项目说明
+```
+
+## 设计规范
+
+详细的设计规范请查看 [DESIGN_GUIDE.md](./DESIGN_GUIDE.md),包含:
+
+- 设计原则
+- 颜色系统
+- 排版规范
+- 间距系统
+- 组件规范
+- 布局规范
+- 交互规范
+- 响应式设计
+- 页面模板
+
+## 页面模板
+
+项目将提供以下标准页面模板:
+
+- [ ] 首页 (Dashboard) - 数据概览、快捷入口
+- [ ] 主框架页面 - 导航布局、侧边栏、顶部栏
+- [ ] 列表页 - 数据表格、筛选、操作
+- [ ] 详情页 - 信息展示、关联数据
+- [ ] 表单页 - 数据录入、验证、提交
+- [ ] 设置页 - 配置管理、偏好设置
+
+每个模板都会提供完整的设计规范说明和代码实现。
+
+## 开发规范
+
+### 代码风格
+
+- 使用 ESLint 进行代码检查
+- 组件命名使用大驼峰 (PascalCase)
+- 文件命名与组件同名
+- 优先使用函数式组件和 Hooks
+
+### CSS 使用规范
+
+1. 优先使用 Tailwind CSS 工具类
+2. 通过 Ant Design 主题配置进行定制
+3. 仅在必要时编写自定义样式
+
+### 组件开发规范
+
+- 保持组件的单一职责
+- 合理拆分组件,提高复用性
+- 使用 PropTypes 或 TypeScript 进行类型检查
+- 编写必要的注释和文档
+
+## 参与贡献
+
+1. Fork 本仓库
+2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
+3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
+4. 推送到分支 (`git push origin feature/AmazingFeature`)
+5. 开启 Pull Request
+
+## 版本历史
+
+- **v1.0.0** (2024-11-04)
+ - 初始化项目
+ - 创建基础设计规范文档
+ - 建立项目结构
+
+## 许可证
+
+MIT License
+
+## 联系方式
+
+如有问题或建议,请联系开发团队。
+
+---
+
+**维护团队**: Nex Design Team
+**最后更新**: 2024-11-04
diff --git a/docs/drawer-width-standard.md b/docs/drawer-width-standard.md
new file mode 100644
index 0000000..4601612
--- /dev/null
+++ b/docs/drawer-width-standard.md
@@ -0,0 +1,77 @@
+# Nex Design - 抽屉(Drawer)宽度标准
+
+## 📐 抽屉宽度定义
+
+为了保持设计一致性,我们定义了三种标准抽屉宽度模式:
+
+### 1. 小型抽屉 (Small) - 480px
+**适用场景:**
+- 简单的信息展示
+- 少量字段的表单(1-3个字段)
+- 快速操作面板
+- 通知详情
+
+**示例:**
+```jsx
+
+```
+
+### 2. 中型抽屉 (Medium) - 720px ⭐️ 推荐
+**适用场景:**
+- 详细信息展示(如主机详情)
+- 中等复杂度的表单(4-10个字段)
+- 数据编辑面板
+- 配置设置
+
+**示例:**
+```jsx
+
+```
+**当前主机列表页面使用此宽度模式**
+
+### 3. 大型抽屉 (Large) - 1080px
+**适用场景:**
+- 复杂的多步骤表单
+- 需要并排展示多列信息
+- 包含图表或复杂可视化内容
+- 嵌套子表格或列表
+
+**示例:**
+```jsx
+
+```
+
+## 📱 响应式建议
+
+```css
+/* 移动端自适应 */
+@media (max-width: 768px) {
+ .ant-drawer {
+ width: 100% !important;
+ }
+}
+
+/* 平板端 */
+@media (max-width: 1024px) {
+ .ant-drawer-large {
+ width: 90% !important;
+ }
+}
+```
+
+## 💡 使用建议
+
+1. **优先选择中型抽屉(720px)**:适合大多数场景,既不会太窄导致内容拥挤,也不会太宽浪费空间。
+
+2. **避免自定义宽度**:保持使用标准宽度,确保整个系统的一致性。
+
+3. **移动端优先**:在响应式设计中,小屏幕设备应使用全宽抽屉。
+
+4. **内容决定宽度**:根据内容复杂度选择合适的宽度,而不是随意设置。
+
+## 🎨 设计原则
+
+- **一致性**:相同类型的页面使用相同宽度的抽屉
+- **可读性**:确保内容在抽屉中有足够的呼吸空间
+- **响应式**:考虑不同设备的显示效果
+- **用户体验**:抽屉不应遮挡主要内容过多
diff --git a/docs/pages/main-layout.md b/docs/pages/main-layout.md
new file mode 100644
index 0000000..1560792
--- /dev/null
+++ b/docs/pages/main-layout.md
@@ -0,0 +1,495 @@
+# 主框架页面设计规范
+
+> Nex Design 主框架布局设计文档
+
+## 概述
+
+主框架页面是应用的基础布局结构,包含侧边菜单栏、顶部导航栏和内容区域。本文档详细说明了主框架的设计规范、交互逻辑和实现要点。
+
+---
+
+## 页面结构
+
+```
+┌─────────────────────────────────────────────────────┐
+│ 顶部导航栏 (64px) │
+├──────────┬──────────────────────────────────────────┤
+│ │ │
+│ 侧边栏 │ 内容区域 │
+│ (200px) │ (可向下滚动) │
+│ │ │
+│ │ │
+└──────────┴──────────────────────────────────────────┘
+```
+
+---
+
+## 1. 侧边栏 (Sider)
+
+### 1.1 基础规范
+
+| 属性 | 展开状态 | 收起状态 |
+|------|---------|---------|
+| 宽度 | 200px | 64px |
+| 背景色 | #001529 (深色) | #001529 |
+| 位置 | 固定左侧 | 固定左侧 |
+| 层级 | z-index: 10 | z-index: 10 |
+
+### 1.2 Logo 区域
+
+**设计规范**:
+- 高度:64px
+- 背景:rgba(255, 255, 255, 0.05)
+- 底部边框:1px solid rgba(255, 255, 255, 0.05)
+- 内边距:12px 16px
+- 对齐:居中
+
+**展开状态**:
+- 显示完整 Logo(logo-full.png)
+- Logo 高度:40px,宽度自适应
+
+**收起状态**:
+- 显示方形 Logo(logo-small.png)
+- Logo 尺寸:40px × 40px
+- 圆角:8px
+
+### 1.3 菜单系统
+
+#### 菜单层级
+
+支持**两级菜单**结构:
+- **一级菜单**:带图标,可展开/收起
+- **二级菜单**:文字列表,可带徽章标识
+
+#### 菜单数据格式
+
+```json
+[
+ {
+ "key": "overview",
+ "label": "概览",
+ "icon": "DashboardOutlined",
+ "path": "/overview"
+ },
+ {
+ "key": "certificate",
+ "label": "证书管理",
+ "icon": "SafetyCertificateOutlined",
+ "children": [
+ {
+ "key": "ssl-cert",
+ "label": "SSL证书管理",
+ "path": "/certificate/ssl"
+ }
+ ]
+ }
+]
+```
+
+#### 菜单状态
+
+**正常状态**:
+- 背景色:透明
+- 文字颜色:rgba(255, 255, 255, 0.65)
+
+**悬停状态**:
+- 背景色:rgba(184, 23, 141, 0.2)
+- 文字颜色:#fff
+
+**选中状态**:
+- 背景色:#b8178d (品牌主色)
+- 文字颜色:#fff
+- 左侧边框:3px solid #b8178d
+
+**展开状态**:
+- 二级菜单背景:rgba(0, 0, 0, 0.15)
+- 二级菜单内边距:左侧 48px
+
+#### 徽章系统
+
+支持在菜单项上显示徽章标识:
+
+- **HOT 徽章**:
+ - 背景色:#ff4d4f (红色)
+ - 文字:白色
+ - 尺寸:18px 高度,圆角 9px
+
+- **NEW 徽章**:
+ - 背景色:#52c41a (绿色)
+ - 文字:白色
+ - 尺寸:18px 高度,圆角 9px
+
+**注意**:收起状态下徽章自动隐藏。
+
+#### 收起状态行为
+
+- 仅显示一级菜单图标
+- 鼠标悬停时不展开子菜单
+- 点击跳转到该分类的默认页面
+
+### 1.4 滚动条样式
+
+```css
+宽度:6px
+轨道:透明
+滑块:rgba(255, 255, 255, 0.2)
+滑块悬停:rgba(255, 255, 255, 0.3)
+圆角:3px
+```
+
+---
+
+## 2. 顶部导航栏 (Header)
+
+### 2.1 基础规范
+
+| 属性 | 值 |
+|------|---|
+| 高度 | 64px |
+| 背景色 | #ffffff |
+| 阴影 | 0 1px 4px rgba(0, 21, 41, 0.08) |
+| 位置 | sticky,top: 0 |
+| 层级 | z-index: 9 |
+| 内边距 | 0 24px |
+
+### 2.2 左侧区域
+
+**折叠按钮**:
+- 图标尺寸:18px
+- 颜色:rgba(0, 0, 0, 0.65)
+- 悬停色:#b8178d (品牌主色)
+- 悬停背景:rgba(0, 0, 0, 0.03)
+- 内边距:8px
+- 圆角:4px
+- 功能:切换侧边栏展开/收起状态
+
+**工作台标识**:
+- 字号:14px
+- 字重:500 (Medium)
+- 颜色:rgba(0, 0, 0, 0.88)
+- 左侧间距:16px
+
+### 2.3 右侧区域
+
+从左到右依次包含:
+
+1. **搜索框**
+ - 宽度:200px
+ - 高度:32px
+ - 圆角:16px (胶囊形)
+ - 占位文字:"搜索..."
+ - 前缀图标:SearchOutlined
+
+2. **帮助图标**
+ - 图标:QuestionCircleOutlined
+ - 尺寸:16px
+ - 颜色:rgba(0, 0, 0, 0.65)
+ - 悬停色:#b8178d
+
+3. **功能链接**(ICP 备案、企业、支持)
+ - 字号:14px
+ - 颜色:rgba(0, 0, 0, 0.65)
+ - 悬停色:#b8178d
+ - 悬停背景:rgba(0, 0, 0, 0.03)
+ - 内边距:4px 8px
+ - 圆角:4px
+
+4. **工单图标**
+ - 图标:SettingOutlined
+ - 样式同帮助图标
+
+5. **消息中心**
+ - 图标:BellOutlined
+ - 带徽章:Badge count={5}
+ - 徽章位置:右上角,offset: [-3, 3]
+ - 徽章尺寸:small
+
+6. **用户信息**
+ - 头像:32px × 32px 圆形
+ - 用户名:14px,Medium 字重
+ - 颜色:rgba(0, 0, 0, 0.88)
+ - 整体内边距:4px 8px
+ - 悬停背景:rgba(0, 0, 0, 0.03)
+ - 点击显示下拉菜单
+
+**间距**:各元素之间间距 16-20px
+
+---
+
+## 3. 内容区域 (Content)
+
+### 3.1 基础规范
+
+| 属性 | 值 |
+|------|---|
+| 背景色 | #f5f5f5 |
+| 内边距 | 24px |
+| 高度 | calc(100vh - 64px) |
+| 滚动 | overflow-y: auto |
+
+### 3.2 内容容器
+
+- 最大宽度:根据业务需求,建议 1200-1600px
+- 内边距:24px
+- 背景色:根据内容类型,卡片为 #fff
+
+### 3.3 滚动行为
+
+- 仅内容区域可滚动
+- 顶部导航栏和侧边栏保持固定
+- 滚动条样式与全局一致
+
+---
+
+## 4. 响应式适配
+
+### 4.1 断点规则
+
+| 断点 | 行为 |
+|------|------|
+| < 768px | 侧边栏默认收起,通过遮罩层展开 |
+| ≥ 768px | 侧边栏可正常展开/收起 |
+| ≥ 1200px | 建议默认展开侧边栏 |
+
+### 4.2 移动端优化
+
+- 侧边栏改为抽屉模式 (Drawer)
+- 顶部搜索框宽度减小或移至下拉菜单
+- 功能链接收起至"更多"菜单
+- 用户信息简化显示
+
+---
+
+## 5. 主题配色
+
+### 5.1 品牌主色
+
+基于 NEX Logo 的紫红色:
+
+```css
+--primary-color: #b8178d;
+--primary-hover: #9c1477;
+--primary-active: #801161;
+```
+
+### 5.2 辅助色
+
+- **蓝色**(信息色):#1677ff
+- **绿色**(成功):#52c41a
+- **红色**(错误/警告):#ff4d4f
+- **橙色**(警告):#faad14
+
+### 5.3 中性色
+
+```css
+--text-primary: rgba(0, 0, 0, 0.88);
+--text-secondary: rgba(0, 0, 0, 0.65);
+--text-tertiary: rgba(0, 0, 0, 0.45);
+--bg-primary: #ffffff;
+--bg-secondary: #fafafa;
+--bg-tertiary: #f5f5f5;
+--border-color: #d9d9d9;
+```
+
+---
+
+## 6. 交互规范
+
+### 6.1 侧边栏折叠
+
+**触发方式**:
+- 点击顶部折叠按钮
+- 可选:在设置中保存用户偏好
+
+**动画**:
+- 过渡时间:200ms
+- 缓动函数:ease-in-out
+- 影响元素:侧边栏宽度、Logo、菜单文字
+
+**状态保持**:
+- 使用 localStorage 保存用户折叠状态
+- 页面刷新后保持用户选择
+
+### 6.2 菜单导航
+
+**展开逻辑**:
+- 点击一级菜单展开/收起二级菜单
+- 默认展开当前路由所在的菜单组
+- 支持手风琴模式(可选)
+
+**高亮逻辑**:
+- 根据当前路由自动高亮对应菜单项
+- 二级菜单选中时,一级菜单也显示激活状态
+
+**跳转方式**:
+- 使用 React Router 进行路由跳转
+- 支持浏览器前进/后退
+
+### 6.3 用户下拉菜单
+
+**菜单项**:
+- 个人中心
+- 账户设置
+- 分割线
+- 退出登录
+
+**交互**:
+- 点击用户信息区域展开
+- 点击菜单项执行对应操作
+- 点击外部区域关闭
+
+---
+
+## 7. 代码实现
+
+### 7.1 组件结构
+
+```
+MainLayout/
+├── MainLayout.jsx # 主布局组件
+├── MainLayout.css # 布局样式
+├── AppSider.jsx # 侧边栏组件
+├── AppSider.css # 侧边栏样式
+├── AppHeader.jsx # 顶部栏组件
+├── AppHeader.css # 顶部栏样式
+└── index.js # 导出文件
+```
+
+### 7.2 菜单数据配置
+
+菜单数据独立维护在 `src/constants/menuData.json`,便于更新和管理。
+
+### 7.3 关键技术点
+
+1. **状态管理**:
+ - collapsed 状态通过 props 传递
+ - 菜单展开状态 (openKeys) 在 AppSider 内部管理
+
+2. **路由集成**:
+ - 使用 useNavigate 进行路由跳转
+ - 使用 useLocation 获取当前路由
+
+3. **图标映射**:
+ - 通过 iconMap 对象将字符串转换为图标组件
+
+4. **主题定制**:
+ - 在 src/main.jsx 中配置 Ant Design 主题
+ - 使用 ConfigProvider 包裹应用
+
+---
+
+## 8. 示例页面
+
+### 8.1 概览页 (Overview)
+
+作为主框架的示例页面,展示了:
+- 统计卡片布局
+- 图表展示
+- 数据可视化
+- 响应式栅格系统
+
+详细设计见:[概览页设计文档](./overview.md)
+
+---
+
+## 9. 可访问性
+
+### 9.1 键盘导航
+
+- 支持 Tab 键在可交互元素间切换
+- 支持 Enter 键激活菜单项
+- 支持方向键在菜单间导航
+
+### 9.2 语义化标签
+
+- 使用 nav 标签包裹导航菜单
+- 使用 header 标签包裹顶部栏
+- 使用 main 标签包裹主内容区
+
+### 9.3 对比度
+
+- 所有文本与背景对比度 ≥ 4.5:1
+- 图标与背景对比度 ≥ 3:1
+
+---
+
+## 10. 性能优化
+
+### 10.1 懒加载
+
+- 页面组件使用 React.lazy 懒加载
+- 减少首屏加载时间
+
+### 10.2 防抖优化
+
+- 搜索框输入使用防抖处理
+- 窗口大小变化使用节流处理
+
+### 10.3 虚拟滚动
+
+- 菜单项较多时考虑虚拟滚动
+- 长列表使用虚拟化技术
+
+---
+
+## 11. 开发指南
+
+### 11.1 添加新菜单
+
+1. 编辑 `src/constants/menuData.json`
+2. 添加菜单项配置
+3. 如需新图标,在 `AppSider.jsx` 的 iconMap 中添加映射
+4. 创建对应的页面组件
+5. 在 `App.jsx` 中添加路由
+
+### 11.2 自定义主题
+
+1. 编辑 `src/main.jsx` 中的 theme 配置
+2. 修改 `tailwind.config.js` 中的颜色系统
+3. 更新 `src/styles/globals.css` 中的 CSS 变量
+
+### 11.3 扩展功能
+
+- 添加面包屑导航
+- 添加页签 (Tabs) 功能
+- 添加全局设置抽屉
+- 添加主题切换(亮色/暗色)
+
+---
+
+## 12. 常见问题
+
+### Q1: 如何修改侧边栏默认展开状态?
+
+在 `MainLayout.jsx` 中修改 `collapsed` 的初始值:
+
+```jsx
+const [collapsed, setCollapsed] = useState(false) // false 为展开
+```
+
+### Q2: 如何添加三级菜单?
+
+当前设计仅支持两级菜单。如需三级菜单,需要:
+1. 修改 menuData.json 数据结构
+2. 修改 AppSider.jsx 中的 getMenuItems 函数
+3. 考虑 UI 空间和用户体验
+
+### Q3: 如何实现菜单权限控制?
+
+建议:
+1. 在菜单数据中添加 `roles` 或 `permissions` 字段
+2. 在渲染菜单前根据用户权限过滤
+3. 在路由层面也要做权限校验
+
+---
+
+## 版本记录
+
+| 版本 | 日期 | 说明 |
+|------|------|------|
+| 1.0.0 | 2024-11-04 | 初始版本,完成主框架设计 |
+
+---
+
+**维护者**: Nex Design Team
+**最后更新**: 2024-11-04
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..85d8632
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Nex Design - 设计规范系统
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..f8a7ef7
--- /dev/null
+++ b/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "nex-design",
+ "version": "1.0.0",
+ "description": "面向 React + Ant Design + Tailwind CSS 的前端设计语言规范",
+ "private": true,
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview",
+ "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0"
+ },
+ "dependencies": {
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "antd": "^5.12.0",
+ "react-router-dom": "^6.20.0",
+ "@ant-design/icons": "^5.2.6"
+ },
+ "devDependencies": {
+ "@types/react": "^18.2.43",
+ "@types/react-dom": "^18.2.17",
+ "@vitejs/plugin-react": "^4.2.1",
+ "vite": "^5.0.8",
+ "eslint": "^8.55.0",
+ "eslint-plugin-react": "^7.33.2",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.4.5",
+ "tailwindcss": "^3.3.6",
+ "postcss": "^8.4.32",
+ "autoprefixer": "^10.4.16"
+ },
+ "engines": {
+ "node": ">=16.0.0",
+ "yarn": ">=1.22.0"
+ }
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..33ad091
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/src/App.jsx b/src/App.jsx
new file mode 100644
index 0000000..f3da826
--- /dev/null
+++ b/src/App.jsx
@@ -0,0 +1,23 @@
+import { Routes, Route } from 'react-router-dom'
+import MainLayout from './components/MainLayout'
+import OverviewPage from './pages/OverviewPage'
+import HostListPage from './pages/HostListPage'
+import UserListPage from './pages/UserListPage'
+import ImageListPage from './pages/ImageListPage'
+
+function App() {
+ return (
+
+
+ } />
+ } />
+ } />
+ } />
+ } />
+ {/* 其他路由将在后续添加 */}
+
+
+ )
+}
+
+export default App
diff --git a/src/assets/logo-full.png b/src/assets/logo-full.png
new file mode 100644
index 0000000..bafd6b7
Binary files /dev/null and b/src/assets/logo-full.png differ
diff --git a/src/assets/logo-small.png b/src/assets/logo-small.png
new file mode 100644
index 0000000..099c476
Binary files /dev/null and b/src/assets/logo-small.png differ
diff --git a/src/components/ConfirmDialog/ConfirmDialog.jsx b/src/components/ConfirmDialog/ConfirmDialog.jsx
new file mode 100644
index 0000000..d7095b0
--- /dev/null
+++ b/src/components/ConfirmDialog/ConfirmDialog.jsx
@@ -0,0 +1,138 @@
+import { Modal } from 'antd'
+import { ExclamationCircleOutlined, DeleteOutlined } from '@ant-design/icons'
+
+/**
+ * 标准确认对话框组件
+ * @param {Object} options - 对话框配置
+ * @param {string} options.title - 标题
+ * @param {string|ReactNode} options.content - 内容
+ * @param {string} options.okText - 确认按钮文字
+ * @param {string} options.cancelText - 取消按钮文字
+ * @param {string} options.type - 类型: 'warning', 'danger', 'info'
+ * @param {Function} options.onOk - 确认回调
+ * @param {Function} options.onCancel - 取消回调
+ */
+const ConfirmDialog = {
+ /**
+ * 显示删除确认对话框(单个项目)
+ */
+ delete: ({ title = '确认删除', itemName, itemInfo, onOk, onCancel }) => {
+ Modal.confirm({
+ title,
+ content: (
+
+
您确定要删除以下项目吗?
+
+
{itemName}
+ {itemInfo && (
+
{itemInfo}
+ )}
+
+
+ 此操作不可恢复,请谨慎操作!
+
+
+ ),
+ okText: '确认删除',
+ cancelText: '取消',
+ okType: 'danger',
+ centered: true,
+ icon: ,
+ onOk,
+ onCancel,
+ })
+ },
+
+ /**
+ * 显示批量删除确认对话框
+ */
+ batchDelete: ({ count, items, onOk, onCancel }) => {
+ Modal.confirm({
+ title: '批量删除确认',
+ content: (
+
+
您确定要删除选中的 {count} 个项目吗?
+
+ {items.map((item, index) => (
+
+ {item.name}
+ {item.info && (
+
+ ({item.info})
+
+ )}
+
+ ))}
+
+
+ 此操作不可恢复,请谨慎操作!
+
+
+ ),
+ okText: '确认删除',
+ cancelText: '取消',
+ okType: 'danger',
+ centered: true,
+ icon: ,
+ onOk,
+ onCancel,
+ })
+ },
+
+ /**
+ * 显示警告确认对话框
+ */
+ warning: ({ title, content, okText = '确定', cancelText = '取消', onOk, onCancel }) => {
+ Modal.confirm({
+ title,
+ content,
+ okText,
+ cancelText,
+ centered: true,
+ icon: ,
+ onOk,
+ onCancel,
+ })
+ },
+
+ /**
+ * 显示通用确认对话框
+ */
+ confirm: ({
+ title,
+ content,
+ okText = '确定',
+ cancelText = '取消',
+ okType = 'primary',
+ onOk,
+ onCancel,
+ }) => {
+ Modal.confirm({
+ title,
+ content,
+ okText,
+ cancelText,
+ okType,
+ centered: true,
+ onOk,
+ onCancel,
+ })
+ },
+}
+
+export default ConfirmDialog
diff --git a/src/components/MainLayout/AppHeader.css b/src/components/MainLayout/AppHeader.css
new file mode 100644
index 0000000..9b18ee4
--- /dev/null
+++ b/src/components/MainLayout/AppHeader.css
@@ -0,0 +1,129 @@
+.app-header {
+ background: #fff;
+ padding: 0 24px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+ height: 64px;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+/* 左侧区域 */
+.header-left {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+/* Logo 区域 */
+.header-logo {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 168px;
+ transition: width 0.2s;
+}
+
+.logo-small {
+ width: 40px;
+ height: 40px;
+ border-radius: 8px;
+ transition: all 0.2s;
+}
+
+.logo-full {
+ height: 32px;
+ width: auto;
+ transition: all 0.2s;
+}
+
+.trigger {
+ font-size: 18px;
+ cursor: pointer;
+ transition: color 0.3s;
+ padding: 8px;
+ border-radius: 4px;
+ color: rgba(0, 0, 0, 0.65);
+ display: flex;
+ align-items: center;
+}
+
+.trigger:hover {
+ color: #b8178d;
+ background: rgba(184, 23, 141, 0.06);
+}
+
+/* 右侧区域 */
+.header-right {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+.header-search {
+ border-radius: 16px;
+}
+
+.header-actions {
+ display: flex;
+ align-items: center;
+}
+
+.header-icon {
+ font-size: 16px;
+ color: rgba(0, 0, 0, 0.65);
+ cursor: pointer;
+ transition: all 0.3s;
+ padding: 8px;
+ border-radius: 4px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.header-icon:hover {
+ color: #b8178d;
+ background: rgba(184, 23, 141, 0.06);
+}
+
+.header-link {
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.65);
+ cursor: pointer;
+ transition: all 0.3s;
+ padding: 6px 12px;
+ border-radius: 4px;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+}
+
+.header-link:hover {
+ color: #b8178d;
+ background: rgba(184, 23, 141, 0.06);
+}
+
+.user-info {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ cursor: pointer;
+ padding: 4px 8px;
+ border-radius: 4px;
+ transition: all 0.3s;
+}
+
+.user-info:hover {
+ background: rgba(184, 23, 141, 0.06);
+}
+
+.username {
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.88);
+ font-weight: 500;
+}
+
+.ml-1 {
+ margin-left: 4px;
+}
diff --git a/src/components/MainLayout/AppHeader.jsx b/src/components/MainLayout/AppHeader.jsx
new file mode 100644
index 0000000..1748133
--- /dev/null
+++ b/src/components/MainLayout/AppHeader.jsx
@@ -0,0 +1,121 @@
+import { Layout, Input, Badge, Avatar, Dropdown, Space } from 'antd'
+import {
+ MenuFoldOutlined,
+ MenuUnfoldOutlined,
+ SearchOutlined,
+ BellOutlined,
+ QuestionCircleOutlined,
+ FileTextOutlined,
+ CustomerServiceOutlined,
+ UserOutlined,
+} from '@ant-design/icons'
+import headerMenuData from '../../constants/headerMenuData.json'
+import logoFull from '../../assets/logo-full.png'
+import './AppHeader.css'
+
+const { Header } = Layout
+
+// 图标映射
+const iconMap = {
+ QuestionCircleOutlined: ,
+ FileTextOutlined: ,
+ CustomerServiceOutlined: ,
+}
+
+function AppHeader({ collapsed, onToggle }) {
+ // 用户下拉菜单
+ const userMenuItems = [
+ {
+ key: 'profile',
+ label: '个人中心',
+ },
+ {
+ key: 'settings',
+ label: '账户设置',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ key: 'logout',
+ label: '退出登录',
+ },
+ ]
+
+ const handleUserMenuClick = ({ key }) => {
+ if (key === 'logout') {
+ console.log('退出登录')
+ }
+ }
+
+ const handleHeaderMenuClick = (key) => {
+ console.log('Header menu clicked:', key)
+ }
+
+ return (
+
+ )
+}
+
+export default AppHeader
diff --git a/src/components/MainLayout/AppSider.css b/src/components/MainLayout/AppSider.css
new file mode 100644
index 0000000..f4a98aa
--- /dev/null
+++ b/src/components/MainLayout/AppSider.css
@@ -0,0 +1,96 @@
+.app-sider {
+ height: 100%;
+ overflow: auto;
+ background: #fafafa;
+ border-right: 1px solid #f0f0f0;
+ transition: all 0.2s;
+}
+
+.app-sider::-webkit-scrollbar {
+ width: 6px;
+}
+
+.app-sider::-webkit-scrollbar-thumb {
+ background: rgba(0, 0, 0, 0.1);
+ border-radius: 3px;
+}
+
+.app-sider::-webkit-scrollbar-thumb:hover {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+/* 菜单样式 */
+.sider-menu {
+ border-right: none;
+ padding-top: 8px;
+ background: #fafafa;
+}
+
+/* 收起状态下的图标放大 */
+:global(.ant-layout-sider-collapsed) .sider-menu :global(.ant-menu-item) {
+ padding: 0 !important;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 56px;
+ margin: 8px 0;
+}
+
+/* 收起状态下的 SubMenu 样式 */
+:global(.ant-layout-sider-collapsed) .sider-menu :global(.ant-menu-submenu) {
+ padding: 0 !important;
+}
+
+:global(.ant-layout-sider-collapsed) .sider-menu :global(.ant-menu-submenu-title) {
+ padding: 0 !important;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 56px;
+ margin: 8px 0;
+}
+
+:global(.ant-layout-sider-collapsed) .sider-menu :global(.anticon) {
+ font-size: 24px;
+ margin: 0;
+}
+
+/* 收起状态下的 Tooltip */
+:global(.ant-layout-sider-collapsed) .sider-menu :global(.ant-menu-item-icon) {
+ font-size: 24px;
+}
+
+:global(.ant-layout-sider-collapsed) .sider-menu :global(.ant-menu-submenu-title) :global(.anticon) {
+ font-size: 24px;
+ margin: 0;
+}
+
+/* 菜单项徽章 */
+.menu-item-with-badge {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+}
+
+.menu-badge {
+ font-size: 10px;
+ height: 18px;
+ line-height: 18px;
+ border-radius: 9px;
+ padding: 0 6px;
+ margin-left: 8px;
+}
+
+.badge-hot :global(.ant-badge-count) {
+ background: #ff4d4f;
+}
+
+.badge-new :global(.ant-badge-count) {
+ background: #52c41a;
+}
+
+/* 收起状态下隐藏徽章 */
+:global(.ant-layout-sider-collapsed) .menu-badge {
+ display: none;
+}
diff --git a/src/components/MainLayout/AppSider.jsx b/src/components/MainLayout/AppSider.jsx
new file mode 100644
index 0000000..6e33b60
--- /dev/null
+++ b/src/components/MainLayout/AppSider.jsx
@@ -0,0 +1,172 @@
+import { useState, useEffect } from 'react'
+import { Layout, Menu, Badge, Tooltip } from 'antd'
+import { useNavigate, useLocation } from 'react-router-dom'
+import {
+ DashboardOutlined,
+ GlobalOutlined,
+ CloudServerOutlined,
+ UserOutlined,
+ AppstoreOutlined,
+ SettingOutlined,
+} from '@ant-design/icons'
+import menuData from '../../constants/menuData.json'
+import './AppSider.css'
+
+const { Sider } = Layout
+const { SubMenu } = Menu
+
+// 图标映射
+const iconMap = {
+ DashboardOutlined: DashboardOutlined,
+ GlobalOutlined: GlobalOutlined,
+ CloudServerOutlined: CloudServerOutlined,
+ UserOutlined: UserOutlined,
+ AppstoreOutlined: AppstoreOutlined,
+ SettingOutlined: SettingOutlined,
+}
+
+function AppSider({ collapsed, onToggle }) {
+ const navigate = useNavigate()
+ const location = useLocation()
+ const [openKeys, setOpenKeys] = useState([])
+
+ // 根据当前路径获取应该打开的父菜单
+ const getDefaultOpenKeys = () => {
+ const path = location.pathname
+ for (const item of menuData) {
+ if (item.children) {
+ const hasChild = item.children.some((c) => c.path === path)
+ if (hasChild) {
+ return [item.key]
+ }
+ }
+ }
+ return []
+ }
+
+ // 监听路径变化和收拢状态,自动打开父菜单
+ useEffect(() => {
+ if (!collapsed) {
+ const defaultKeys = getDefaultOpenKeys()
+ setOpenKeys(defaultKeys)
+ }
+ }, [location.pathname, collapsed])
+
+ const handleMenuClick = ({ key }) => {
+ // 查找对应的路径
+ for (const item of menuData) {
+ if (item.key === key && item.path) {
+ navigate(item.path)
+ return
+ }
+ if (item.children) {
+ const child = item.children.find((c) => c.key === key)
+ if (child) {
+ navigate(child.path)
+ return
+ }
+ }
+ }
+ }
+
+ const handleOpenChange = (keys) => {
+ setOpenKeys(keys)
+ }
+
+ // 获取当前选中的菜单项
+ const getSelectedKey = () => {
+ const path = location.pathname
+ for (const item of menuData) {
+ if (item.path === path) return item.key
+ if (item.children) {
+ const child = item.children.find((c) => c.path === path)
+ if (child) return child.key
+ }
+ }
+ return 'overview'
+ }
+
+ // 渲染菜单项
+ const renderMenuItems = () => {
+ return menuData.map((item) => {
+ const IconComponent = iconMap[item.icon]
+ const icon = IconComponent ? : null
+
+ // 如果有子菜单
+ if (item.children) {
+ // 在收拢状态下,用 Tooltip 包装 SubMenu 的图标
+ const subMenuIcon = collapsed ? (
+
+ {icon}
+
+ ) : (
+ icon
+ )
+
+ return (
+
+ {item.children.map((child) => (
+
+ {child.badge ? (
+
+ {child.label}
+
+
+ ) : (
+ child.label
+ )}
+
+ ))}
+
+ )
+ }
+
+ // 普通菜单项 - 也用 Tooltip 包装
+ const menuIcon = collapsed ? (
+
+ {icon}
+
+ ) : (
+ icon
+ )
+
+ return (
+
+ {item.label}
+
+ )
+ })
+ }
+
+ return (
+
+ {/* 菜单 */}
+
+
+ )
+}
+
+export default AppSider
diff --git a/src/components/MainLayout/MainLayout.css b/src/components/MainLayout/MainLayout.css
new file mode 100644
index 0000000..386f3ff
--- /dev/null
+++ b/src/components/MainLayout/MainLayout.css
@@ -0,0 +1,24 @@
+.main-layout {
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ background: #fafafa;
+}
+
+.main-content-wrapper {
+ display: flex;
+ flex: 1;
+ height: calc(100vh - 64px);
+ background: #fafafa;
+}
+
+.main-content {
+ background: #f5f5f5;
+ overflow-y: auto;
+ flex: 1;
+}
+
+.content-wrapper {
+ padding: 24px;
+ min-height: 100%;
+}
diff --git a/src/components/MainLayout/MainLayout.jsx b/src/components/MainLayout/MainLayout.jsx
new file mode 100644
index 0000000..2c4ea0b
--- /dev/null
+++ b/src/components/MainLayout/MainLayout.jsx
@@ -0,0 +1,31 @@
+import { useState } from 'react'
+import { Layout } from 'antd'
+import AppSider from './AppSider'
+import AppHeader from './AppHeader'
+import './MainLayout.css'
+
+const { Content } = Layout
+
+function MainLayout({ children }) {
+ const [collapsed, setCollapsed] = useState(false)
+
+ const toggleCollapsed = () => {
+ setCollapsed(!collapsed)
+ }
+
+ return (
+
+
+
+
+
+
+ {children}
+
+
+
+
+ )
+}
+
+export default MainLayout
diff --git a/src/components/MainLayout/index.js b/src/components/MainLayout/index.js
new file mode 100644
index 0000000..12555fd
--- /dev/null
+++ b/src/components/MainLayout/index.js
@@ -0,0 +1,4 @@
+export { default } from './MainLayout'
+export { default as MainLayout } from './MainLayout'
+export { default as AppSider } from './AppSider'
+export { default as AppHeader } from './AppHeader'
diff --git a/src/components/PageHeader/PageHeader.css b/src/components/PageHeader/PageHeader.css
new file mode 100644
index 0000000..6ba9202
--- /dev/null
+++ b/src/components/PageHeader/PageHeader.css
@@ -0,0 +1,109 @@
+.page-header-standard {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ border-radius: 12px;
+ padding: 24px 28px;
+ margin-bottom: 24px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
+ position: relative;
+ overflow: hidden;
+}
+
+.page-header-standard::before {
+ content: '';
+ position: absolute;
+ top: -50%;
+ right: -10%;
+ width: 300px;
+ height: 300px;
+ background: rgba(255, 255, 255, 0.1);
+ border-radius: 50%;
+}
+
+.page-header-main {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ position: relative;
+ z-index: 1;
+}
+
+.back-button {
+ width: 36px;
+ height: 36px;
+ border-radius: 8px;
+ background: rgba(255, 255, 255, 0.2);
+ border: 1px solid rgba(255, 255, 255, 0.3);
+ color: #ffffff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-size: 16px;
+}
+
+.back-button:hover {
+ background: rgba(255, 255, 255, 0.3);
+ transform: translateX(-2px);
+}
+
+.page-header-content {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+.page-header-icon {
+ width: 48px;
+ height: 48px;
+ border-radius: 12px;
+ background: rgba(255, 255, 255, 0.2);
+ backdrop-filter: blur(10px);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 24px;
+ color: #ffffff;
+ border: 1px solid rgba(255, 255, 255, 0.3);
+}
+
+.page-header-text {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+}
+
+.page-header-title {
+ font-size: 22px;
+ font-weight: 600;
+ color: #ffffff;
+ margin: 0;
+ letter-spacing: 0.3px;
+}
+
+.page-header-description {
+ font-size: 14px;
+ color: rgba(255, 255, 255, 0.9);
+ margin: 0;
+ line-height: 1.5;
+}
+
+.page-header-extra {
+ position: relative;
+ z-index: 1;
+}
+
+@media (max-width: 768px) {
+ .page-header-standard {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 16px;
+ }
+
+ .page-header-extra {
+ width: 100%;
+ }
+}
diff --git a/src/components/PageHeader/PageHeader.jsx b/src/components/PageHeader/PageHeader.jsx
new file mode 100644
index 0000000..b934376
--- /dev/null
+++ b/src/components/PageHeader/PageHeader.jsx
@@ -0,0 +1,35 @@
+import { ArrowLeftOutlined } from '@ant-design/icons'
+import './PageHeader.css'
+
+function PageHeader({
+ title,
+ description,
+ icon,
+ showBack = false,
+ onBack,
+ extra
+}) {
+ return (
+
+
+ {showBack && (
+
+ )}
+
+ {icon &&
{icon}
}
+
+
{title}
+ {description && (
+
{description}
+ )}
+
+
+
+ {extra &&
{extra}
}
+
+ )
+}
+
+export default PageHeader
diff --git a/src/components/PageTitleBar/PageTitleBar.css b/src/components/PageTitleBar/PageTitleBar.css
new file mode 100644
index 0000000..9913e32
--- /dev/null
+++ b/src/components/PageTitleBar/PageTitleBar.css
@@ -0,0 +1,165 @@
+.page-title-bar {
+ background: linear-gradient(135deg, #e0e7ff 0%, #f3e8ff 100%);
+ border-radius: 12px;
+ padding: 16px 24px;
+ margin-bottom: 16px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+ position: relative;
+ overflow: hidden;
+ border: 1px solid rgba(139, 92, 246, 0.1);
+}
+
+.page-title-bar::before {
+ content: '';
+ position: absolute;
+ top: -50%;
+ right: -5%;
+ width: 200px;
+ height: 200px;
+ background: rgba(139, 92, 246, 0.05);
+ border-radius: 50%;
+}
+
+.title-bar-content {
+ position: relative;
+ z-index: 1;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.title-bar-left {
+ flex: 1;
+}
+
+.title-row {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+.title-group {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+
+.page-title {
+ font-size: 20px;
+ font-weight: 600;
+ color: #1e293b;
+ margin: 0;
+ letter-spacing: 0.3px;
+}
+
+.title-badge {
+ background: rgba(139, 92, 246, 0.15);
+ color: #7c3aed;
+ padding: 2px 10px;
+ border-radius: 10px;
+ font-size: 12px;
+ font-weight: 500;
+}
+
+.page-description {
+ font-size: 13px;
+ color: #64748b;
+ margin: 0;
+ white-space: nowrap;
+}
+
+.title-bar-right {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+
+.title-actions {
+ display: flex;
+ gap: 10px;
+}
+
+.title-actions button {
+ padding: 8px 16px;
+ border-radius: 6px;
+ font-size: 13px;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.3s;
+ border: none;
+ outline: none;
+}
+
+.title-actions button.primary {
+ background: #7c3aed;
+ color: #ffffff;
+}
+
+.title-actions button.primary:hover {
+ background: #6d28d9;
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(124, 58, 237, 0.25);
+}
+
+.title-actions button.secondary {
+ background: rgba(139, 92, 246, 0.1);
+ color: #7c3aed;
+ border: 1px solid rgba(139, 92, 246, 0.2);
+}
+
+.title-actions button.secondary:hover {
+ background: rgba(139, 92, 246, 0.15);
+ transform: translateY(-1px);
+}
+
+.toggle-button {
+ width: 32px;
+ height: 32px;
+ border-radius: 6px;
+ background: rgba(139, 92, 246, 0.1);
+ border: 1px solid rgba(139, 92, 246, 0.2);
+ color: #7c3aed;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-size: 14px;
+}
+
+.toggle-button:hover {
+ background: rgba(139, 92, 246, 0.2);
+ transform: translateY(-1px);
+}
+
+/* 响应式适配 */
+@media (max-width: 768px) {
+ .title-bar-content {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 12px;
+ }
+
+ .title-row {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 4px;
+ }
+
+ .page-description {
+ white-space: normal;
+ }
+
+ .title-bar-right {
+ width: 100%;
+ justify-content: space-between;
+ }
+
+ .title-actions {
+ flex: 1;
+ }
+
+ .title-actions button {
+ flex: 1;
+ }
+}
diff --git a/src/components/PageTitleBar/PageTitleBar.jsx b/src/components/PageTitleBar/PageTitleBar.jsx
new file mode 100644
index 0000000..870b861
--- /dev/null
+++ b/src/components/PageTitleBar/PageTitleBar.jsx
@@ -0,0 +1,53 @@
+import { useState } from 'react'
+import { UpOutlined, DownOutlined } from '@ant-design/icons'
+import './PageTitleBar.css'
+
+function PageTitleBar({
+ title,
+ badge,
+ description,
+ actions,
+ showToggle = false,
+ onToggle,
+ defaultExpanded = true,
+}) {
+ const [expanded, setExpanded] = useState(defaultExpanded)
+
+ const handleToggle = () => {
+ const newExpanded = !expanded
+ setExpanded(newExpanded)
+ if (onToggle) {
+ onToggle(newExpanded)
+ }
+ }
+
+ return (
+
+
+
+
+
+
{title}
+ {badge && {badge}}
+
+ {description &&
{description}
}
+
+
+
+ {actions &&
{actions}
}
+ {showToggle && (
+
+ )}
+
+
+
+ )
+}
+
+export default PageTitleBar
diff --git a/src/components/Toast/Toast.jsx b/src/components/Toast/Toast.jsx
new file mode 100644
index 0000000..94862e3
--- /dev/null
+++ b/src/components/Toast/Toast.jsx
@@ -0,0 +1,114 @@
+import { notification } from 'antd'
+import {
+ CheckCircleOutlined,
+ CloseCircleOutlined,
+ ExclamationCircleOutlined,
+ InfoCircleOutlined,
+} from '@ant-design/icons'
+
+// 配置全局通知位置和样式
+notification.config({
+ placement: 'topRight',
+ top: 24,
+ duration: 3,
+ maxCount: 3,
+})
+
+/**
+ * 标准通知反馈组件
+ * 从右上角滑出,默认3秒后消失
+ */
+const Toast = {
+ /**
+ * 成功通知
+ * @param {string} message - 消息内容
+ * @param {string} description - 详细描述(可选)
+ * @param {number} duration - 显示时长(秒),默认3秒
+ */
+ success: (message, description = '', duration = 3) => {
+ notification.success({
+ message,
+ description,
+ duration,
+ icon: ,
+ style: {
+ borderRadius: '8px',
+ boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
+ },
+ })
+ },
+
+ /**
+ * 错误通知
+ * @param {string} message - 消息内容
+ * @param {string} description - 详细描述(可选)
+ * @param {number} duration - 显示时长(秒),默认3秒
+ */
+ error: (message, description = '', duration = 3) => {
+ notification.error({
+ message,
+ description,
+ duration,
+ icon: ,
+ style: {
+ borderRadius: '8px',
+ boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
+ },
+ })
+ },
+
+ /**
+ * 警告通知
+ * @param {string} message - 消息内容
+ * @param {string} description - 详细描述(可选)
+ * @param {number} duration - 显示时长(秒),默认3秒
+ */
+ warning: (message, description = '', duration = 3) => {
+ notification.warning({
+ message,
+ description,
+ duration,
+ icon: ,
+ style: {
+ borderRadius: '8px',
+ boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
+ },
+ })
+ },
+
+ /**
+ * 信息通知
+ * @param {string} message - 消息内容
+ * @param {string} description - 详细描述(可选)
+ * @param {number} duration - 显示时长(秒),默认3秒
+ */
+ info: (message, description = '', duration = 3) => {
+ notification.info({
+ message,
+ description,
+ duration,
+ icon: ,
+ style: {
+ borderRadius: '8px',
+ boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
+ },
+ })
+ },
+
+ /**
+ * 自定义通知
+ * @param {Object} config - 完整的通知配置对象
+ */
+ custom: (config) => {
+ notification.open({
+ ...config,
+ style: {
+ borderRadius: '8px',
+ boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
+ ...config.style,
+ },
+ })
+ },
+}
+
+export default Toast
diff --git a/src/constants/headerMenuData.json b/src/constants/headerMenuData.json
new file mode 100644
index 0000000..e7e69db
--- /dev/null
+++ b/src/constants/headerMenuData.json
@@ -0,0 +1,20 @@
+[
+ {
+ "type": "link",
+ "label": "帮助",
+ "key": "help",
+ "icon": "QuestionCircleOutlined"
+ },
+ {
+ "type": "link",
+ "label": "文档",
+ "key": "docs",
+ "icon": "FileTextOutlined"
+ },
+ {
+ "type": "link",
+ "label": "支持",
+ "key": "support",
+ "icon": "CustomerServiceOutlined"
+ }
+]
diff --git a/src/constants/menuData.json b/src/constants/menuData.json
new file mode 100644
index 0000000..847a67c
--- /dev/null
+++ b/src/constants/menuData.json
@@ -0,0 +1,128 @@
+[
+ {
+ "key": "overview",
+ "label": "平台概览",
+ "icon": "DashboardOutlined",
+ "path": "/overview"
+ },
+ {
+ "key": "network",
+ "label": "网络管理",
+ "icon": "GlobalOutlined",
+ "children": [
+ {
+ "key": "network-config",
+ "label": "网络配置",
+ "path": "/network/config"
+ },
+ {
+ "key": "network-monitor",
+ "label": "流量监控",
+ "path": "/network/monitor"
+ },
+ {
+ "key": "network-security",
+ "label": "安全组",
+ "path": "/network/security"
+ },
+ {
+ "key": "network-vpc",
+ "label": "VPC 管理",
+ "path": "/network/vpc"
+ }
+ ]
+ },
+ {
+ "key": "host",
+ "label": "终端管理",
+ "icon": "CloudServerOutlined",
+ "children": [
+ {
+ "key": "host-list",
+ "label": "终端列表",
+ "path": "/host/list"
+ },
+ {
+ "key": "host-monitor",
+ "label": "终端组管理",
+ "path": "/host/monitor"
+ }
+ ]
+ },
+ {
+ "key": "user",
+ "label": "用户管理",
+ "icon": "UserOutlined",
+ "children": [
+ {
+ "key": "user-list",
+ "label": "用户列表",
+ "path": "/user/list"
+ },
+ {
+ "key": "user-role",
+ "label": "用户组管理",
+ "path": "/user/role"
+ }
+ ]
+ },
+ {
+ "key": "image",
+ "label": "镜像管理",
+ "icon": "AppstoreOutlined",
+ "children": [
+ {
+ "key": "image-system",
+ "label": "系统镜像",
+ "path": "/image/list"
+ },
+ {
+ "key": "image-vm",
+ "label": "虚拟机镜像",
+ "path": "/image/vm"
+ },
+ {
+ "key": "image-desktop",
+ "label": "桌面镜像",
+ "path": "/image/desktop"
+ },
+ {
+ "key": "image-tools",
+ "label": "镜像工具",
+ "path": "/image/tools"
+ }
+ ]
+ },
+ {
+ "key": "system",
+ "label": "系统管理",
+ "icon": "SettingOutlined",
+ "children": [
+ {
+ "key": "system-menu",
+ "label": "菜单管理",
+ "path": "/system/menu"
+ },
+ {
+ "key": "system-permission",
+ "label": "权限管理",
+ "path": "/system/permission"
+ },
+ {
+ "key": "system-dict",
+ "label": "字典管理",
+ "path": "/system/dict"
+ },
+ {
+ "key": "system-config",
+ "label": "参数配置",
+ "path": "/system/config"
+ },
+ {
+ "key": "system-log",
+ "label": "操作日志",
+ "path": "/system/log"
+ }
+ ]
+ }
+]
diff --git a/src/data/hostData.json b/src/data/hostData.json
new file mode 100644
index 0000000..dd97a6b
--- /dev/null
+++ b/src/data/hostData.json
@@ -0,0 +1,198 @@
+{
+ "hostGroups": [
+ {
+ "id": "1",
+ "name": "全部主机",
+ "children": [
+ {
+ "id": "1-1",
+ "name": "生产环境",
+ "children": [
+ { "id": "1-1-1", "name": "Web服务器" },
+ { "id": "1-1-2", "name": "数据库服务器" },
+ { "id": "1-1-3", "name": "缓存服务器" }
+ ]
+ },
+ {
+ "id": "1-2",
+ "name": "测试环境",
+ "children": [
+ { "id": "1-2-1", "name": "测试服务器" },
+ { "id": "1-2-2", "name": "开发服务器" }
+ ]
+ },
+ {
+ "id": "1-3",
+ "name": "办公环境",
+ "children": [
+ { "id": "1-3-1", "name": "行政部门" },
+ { "id": "1-3-2", "name": "研发部门" },
+ { "id": "1-3-3", "name": "市场部门" }
+ ]
+ }
+ ]
+ }
+ ],
+ "hosts": [
+ {
+ "id": "1",
+ "name": "Web-Server-01",
+ "mac": "00:1B:44:11:3A:B7",
+ "group": "Web服务器",
+ "groupId": "1-1-1",
+ "status": "online",
+ "ip": "192.168.1.101",
+ "dataDisk": "500GB",
+ "systemDisk": "100GB",
+ "cpu": "Intel Xeon E5-2680 v4",
+ "memory": "32GB",
+ "os": "Ubuntu 20.04 LTS",
+ "uptime": "15天3小时",
+ "lastOnline": "2025-01-15 14:23:05"
+ },
+ {
+ "id": "2",
+ "name": "Web-Server-02",
+ "mac": "00:1B:44:11:3A:B8",
+ "group": "Web服务器",
+ "groupId": "1-1-1",
+ "status": "online",
+ "ip": "192.168.1.102",
+ "dataDisk": "500GB",
+ "systemDisk": "100GB",
+ "cpu": "Intel Xeon E5-2680 v4",
+ "memory": "32GB",
+ "os": "Ubuntu 20.04 LTS",
+ "uptime": "15天3小时",
+ "lastOnline": "2025-01-15 14:23:05"
+ },
+ {
+ "id": "3",
+ "name": "DB-Master-01",
+ "mac": "00:1B:44:11:3A:C1",
+ "group": "数据库服务器",
+ "groupId": "1-1-2",
+ "status": "online",
+ "ip": "192.168.1.201",
+ "dataDisk": "2TB",
+ "systemDisk": "200GB",
+ "cpu": "Intel Xeon Gold 6248R",
+ "memory": "128GB",
+ "os": "CentOS 7.9",
+ "uptime": "45天12小时",
+ "lastOnline": "2025-01-15 14:23:05"
+ },
+ {
+ "id": "4",
+ "name": "DB-Slave-01",
+ "mac": "00:1B:44:11:3A:C2",
+ "group": "数据库服务器",
+ "groupId": "1-1-2",
+ "status": "offline",
+ "ip": "192.168.1.202",
+ "dataDisk": "2TB",
+ "systemDisk": "200GB",
+ "cpu": "Intel Xeon Gold 6248R",
+ "memory": "128GB",
+ "os": "CentOS 7.9",
+ "uptime": "0天0小时",
+ "lastOnline": "2025-01-14 18:45:32"
+ },
+ {
+ "id": "5",
+ "name": "Cache-Server-01",
+ "mac": "00:1B:44:11:3A:D1",
+ "group": "缓存服务器",
+ "groupId": "1-1-3",
+ "status": "online",
+ "ip": "192.168.1.301",
+ "dataDisk": "1TB",
+ "systemDisk": "100GB",
+ "cpu": "AMD EPYC 7542",
+ "memory": "64GB",
+ "os": "Ubuntu 22.04 LTS",
+ "uptime": "30天8小时",
+ "lastOnline": "2025-01-15 14:23:05"
+ },
+ {
+ "id": "6",
+ "name": "Test-Server-01",
+ "mac": "00:1B:44:11:3A:E1",
+ "group": "测试服务器",
+ "groupId": "1-2-1",
+ "status": "online",
+ "ip": "192.168.2.101",
+ "dataDisk": "200GB",
+ "systemDisk": "50GB",
+ "cpu": "Intel Core i7-9700K",
+ "memory": "16GB",
+ "os": "Windows Server 2019",
+ "uptime": "5天18小时",
+ "lastOnline": "2025-01-15 14:23:05"
+ },
+ {
+ "id": "7",
+ "name": "Dev-Server-01",
+ "mac": "00:1B:44:11:3A:F1",
+ "group": "开发服务器",
+ "groupId": "1-2-2",
+ "status": "offline",
+ "ip": "192.168.2.201",
+ "dataDisk": "500GB",
+ "systemDisk": "100GB",
+ "cpu": "AMD Ryzen 9 5900X",
+ "memory": "32GB",
+ "os": "Ubuntu 22.04 LTS",
+ "uptime": "0天0小时",
+ "lastOnline": "2025-01-15 09:12:18"
+ },
+ {
+ "id": "8",
+ "name": "Office-PC-01",
+ "mac": "00:1B:44:11:3A:G1",
+ "group": "行政部门",
+ "groupId": "1-3-1",
+ "status": "online",
+ "ip": "192.168.3.101",
+ "dataDisk": "1TB",
+ "systemDisk": "256GB",
+ "cpu": "Intel Core i5-11400",
+ "memory": "16GB",
+ "os": "Windows 10 Pro",
+ "uptime": "2天6小时",
+ "lastOnline": "2025-01-15 14:23:05"
+ },
+ {
+ "id": "9",
+ "name": "Dev-PC-01",
+ "mac": "00:1B:44:11:3A:H1",
+ "group": "研发部门",
+ "groupId": "1-3-2",
+ "status": "online",
+ "ip": "192.168.3.201",
+ "dataDisk": "2TB",
+ "systemDisk": "512GB",
+ "cpu": "Intel Core i9-12900K",
+ "memory": "64GB",
+ "os": "Ubuntu 22.04 LTS",
+ "uptime": "8天14小时",
+ "lastOnline": "2025-01-15 14:23:05"
+ },
+ {
+ "id": "10",
+ "name": "Marketing-PC-01",
+ "mac": "00:1B:44:11:3A:I1",
+ "group": "市场部门",
+ "groupId": "1-3-3",
+ "status": "offline",
+ "ip": "192.168.3.301",
+ "dataDisk": "500GB",
+ "systemDisk": "256GB",
+ "cpu": "Intel Core i7-11700",
+ "memory": "32GB",
+ "os": "Windows 11 Pro",
+ "uptime": "0天0小时",
+ "lastOnline": "2025-01-15 12:30:22"
+ }
+ ]
+}
diff --git a/src/data/imageData.json b/src/data/imageData.json
new file mode 100644
index 0000000..afaaa8e
--- /dev/null
+++ b/src/data/imageData.json
@@ -0,0 +1,94 @@
+{
+ "imageGroups": [
+ {
+ "id": "1",
+ "name": "默认分组"
+ }
+ ],
+ "images": [
+ {
+ "id": 1,
+ "name": "uos-desktop-20-professional-hwe-1070-amd64",
+ "os": "linux",
+ "version": "202412",
+ "status": "成功",
+ "uploadTime": "1759199107299",
+ "fileName": "uos-desktop-20-professional-hwe-1070-amd64-202412.iso",
+ "filePath": "/vms/iso/uos-desktop-20-professional-hwe-1070-amd64-202412.iso",
+ "btPath": "--",
+ "description": "--"
+ },
+ {
+ "id": 2,
+ "name": "Kylin-Desktop-V10-SP1-HWE-Release-2303-X86_64",
+ "os": "linux",
+ "version": "2303",
+ "status": "成功",
+ "uploadTime": "2025-10-09 09:55:41",
+ "fileName": "Kylin-Desktop-V10-SP1-HWE-Release-2303-X86_64.iso",
+ "filePath": "/vms/iso/Kylin-Desktop-V10-SP1-HWE-Release-2303-X86_64.iso",
+ "btPath": "--",
+ "description": "--"
+ },
+ {
+ "id": 3,
+ "name": "ky2203",
+ "os": "linux",
+ "version": "2203",
+ "status": "成功",
+ "uploadTime": "2025-10-13 09:41:50",
+ "fileName": "ky2203.iso",
+ "filePath": "/vms/iso/Kylin-Desktop-V10-SP1-General-Release-2203-X86_64.iso",
+ "btPath": "--",
+ "description": "--"
+ },
+ {
+ "id": 4,
+ "name": "windows-10",
+ "os": "windows",
+ "version": "1",
+ "status": "成功",
+ "uploadTime": "2025-10-14 16:54:38",
+ "fileName": "windows-10.iso",
+ "filePath": "/vms/iso/cn_windows_10_business.iso",
+ "btPath": "--",
+ "description": "--"
+ },
+ {
+ "id": 5,
+ "name": "windows-11",
+ "os": "windows",
+ "version": "1",
+ "status": "成功",
+ "uploadTime": "2025-10-14 16:54:49",
+ "fileName": "windows-11.iso",
+ "filePath": "/vms/iso/Windows11.iso",
+ "btPath": "--",
+ "description": "--"
+ },
+ {
+ "id": 6,
+ "name": "Kylin-Desktop-V10-SP1-2403-HWE-Release-2403-x86_64",
+ "os": "linux",
+ "version": "2403",
+ "status": "成功",
+ "uploadTime": "2025-10-28 10:14:36",
+ "fileName": "Kylin-Desktop-V10-SP1-2403-HWE-Release-2403-x86_64.iso",
+ "filePath": "/vms/iso/Kylin-Desktop-V10-SP1-2403-HWE-Release-2403-x86_64.iso",
+ "btPath": "--",
+ "description": "--"
+ },
+ {
+ "id": 7,
+ "name": "Kylin-Desktop-V10-SP1-2503-X86_64",
+ "os": "linux",
+ "version": "2503",
+ "status": "成功",
+ "uploadTime": "2025-10-28 10:28:32",
+ "fileName": "Kylin-Desktop-V10-SP1-2503-X86_64.iso",
+ "filePath": "/vms/iso/Kylin-Desktop-V10-SP1-2503-HWE-Release-2503-X86_64.iso",
+ "btPath": "--",
+ "description": "--"
+ }
+ ]
+}
diff --git a/src/data/userData.json b/src/data/userData.json
new file mode 100644
index 0000000..beb9d8d
--- /dev/null
+++ b/src/data/userData.json
@@ -0,0 +1,194 @@
+{
+ "userGroups": [
+ {
+ "id": "1",
+ "name": "默认组织",
+ "children": [
+ {
+ "id": "1-1",
+ "name": "黑名单"
+ },
+ {
+ "id": "1-2",
+ "name": "用户测试分组"
+ }
+ ]
+ }
+ ],
+ "users": [
+ {
+ "id": 1,
+ "userName": "admin",
+ "userType": "个人用户",
+ "name": "admin",
+ "groupId": "1",
+ "group": "默认组织",
+ "status": "enabled",
+ "grantedTerminals": 8,
+ "grantedImages": 21,
+ "terminals": [
+ {
+ "id": 1,
+ "name": "默认终端",
+ "group": "默认终端分组",
+ "mac": "C8:D9:D2:00:B6:4B",
+ "ip": "10.100.51.207",
+ "status": "离线",
+ "grantedImages": 1,
+ "dataDisk": "316GB",
+ "systemDisk": "200GB"
+ },
+ {
+ "id": 2,
+ "name": "默认终端",
+ "group": "默认终端分组",
+ "mac": "90:E2:FC:B6:D3:4F",
+ "ip": "10.100.51.162",
+ "status": "离线",
+ "grantedImages": 1,
+ "dataDisk": "120GB",
+ "systemDisk": "200GB"
+ },
+ {
+ "id": 3,
+ "name": "默认终端",
+ "group": "默认终端分组",
+ "mac": "68:05:CA:9E:E1:98",
+ "ip": "10.100.51.166",
+ "status": "在线",
+ "grantedImages": 2,
+ "dataDisk": "316GB",
+ "systemDisk": "200GB"
+ }
+ ],
+ "images": [
+ {
+ "id": 1,
+ "name": "win10开发勾删",
+ "system": "windows-10",
+ "os": "Windows",
+ "createTime": "2025-10-15 01:10:37",
+ "status": "已下发",
+ "method": "自动下载"
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "userName": "user",
+ "userType": "个人用户",
+ "name": "user",
+ "groupId": "1",
+ "group": "默认组织",
+ "status": "enabled",
+ "grantedTerminals": 8,
+ "grantedImages": 9,
+ "terminals": [],
+ "images": []
+ },
+ {
+ "id": 3,
+ "userName": "test_user",
+ "userType": "个人用户",
+ "name": "测试用户",
+ "groupId": "1-2",
+ "group": "用户测试分组",
+ "status": "enabled",
+ "grantedTerminals": 8,
+ "grantedImages": 8,
+ "terminals": [],
+ "images": []
+ },
+ {
+ "id": 4,
+ "userName": "nex",
+ "userType": "游客",
+ "name": "匿名用户",
+ "groupId": "1",
+ "group": "默认组织",
+ "status": "enabled",
+ "grantedTerminals": 8,
+ "grantedImages": 10,
+ "terminals": [],
+ "images": []
+ },
+ {
+ "id": 5,
+ "userName": "unis",
+ "userType": "个人用户",
+ "name": "unis",
+ "groupId": "1",
+ "group": "默认组织",
+ "status": "enabled",
+ "grantedTerminals": 8,
+ "grantedImages": 10,
+ "terminals": [],
+ "images": []
+ },
+ {
+ "id": 6,
+ "userName": "ceshi123",
+ "userType": "个人用户",
+ "name": "加密测试",
+ "groupId": "1",
+ "group": "默认组织",
+ "status": "enabled",
+ "grantedTerminals": 6,
+ "grantedImages": 9,
+ "terminals": [],
+ "images": []
+ },
+ {
+ "id": 7,
+ "userName": "ceshi12345",
+ "userType": "个人用户",
+ "name": "测试1",
+ "groupId": "1-1",
+ "group": "黑名单",
+ "status": "enabled",
+ "grantedTerminals": 1,
+ "grantedImages": 4,
+ "terminals": [],
+ "images": []
+ },
+ {
+ "id": 8,
+ "userName": "unis1",
+ "userType": "个人用户",
+ "name": "unis1",
+ "groupId": "1",
+ "group": "默认组织",
+ "status": "enabled",
+ "grantedTerminals": 5,
+ "grantedImages": 6,
+ "terminals": [],
+ "images": []
+ },
+ {
+ "id": 9,
+ "userName": "abcde",
+ "userType": "个人用户",
+ "name": "测试",
+ "groupId": "1",
+ "group": "默认组织",
+ "status": "enabled",
+ "grantedTerminals": 0,
+ "grantedImages": 0,
+ "terminals": [],
+ "images": []
+ },
+ {
+ "id": 10,
+ "userName": "qazwsx",
+ "userType": "个人用户",
+ "name": "qazwsx",
+ "groupId": "1",
+ "group": "默认组织",
+ "status": "enabled",
+ "grantedTerminals": 0,
+ "grantedImages": 0,
+ "terminals": [],
+ "images": []
+ }
+ ]
+}
diff --git a/src/main.jsx b/src/main.jsx
new file mode 100644
index 0000000..ca5a97e
--- /dev/null
+++ b/src/main.jsx
@@ -0,0 +1,42 @@
+import React from 'react'
+import ReactDOM from 'react-dom/client'
+import { BrowserRouter } from 'react-router-dom'
+import { ConfigProvider } from 'antd'
+import zhCN from 'antd/locale/zh_CN'
+import App from './App.jsx'
+import './styles/globals.css'
+
+// Ant Design 主题配置
+const theme = {
+ token: {
+ colorPrimary: '#b8178d', // 品牌主色 - 匹配 NEX LOGO
+ colorInfo: '#1677ff', // 信息色使用蓝色
+ borderRadius: 8,
+ fontSize: 14,
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif',
+ },
+ components: {
+ Button: {
+ controlHeight: 32,
+ controlHeightLG: 40,
+ controlHeightSM: 24,
+ },
+ Input: {
+ controlHeight: 32,
+ },
+ Menu: {
+ itemHeight: 48,
+ collapsedIconSize: 24,
+ },
+ },
+}
+
+ReactDOM.createRoot(document.getElementById('root')).render(
+
+
+
+
+
+
+ ,
+)
diff --git a/src/pages/HostListPage.css b/src/pages/HostListPage.css
new file mode 100644
index 0000000..c46cb10
--- /dev/null
+++ b/src/pages/HostListPage.css
@@ -0,0 +1,582 @@
+.host-list-page {
+ width: 100%;
+}
+
+/* 统计面板 */
+.stats-panel {
+ margin-bottom: 16px;
+ animation: slideDown 0.3s ease;
+}
+
+@keyframes slideDown {
+ from {
+ opacity: 0;
+ max-height: 0;
+ transform: translateY(-10px);
+ }
+ to {
+ opacity: 1;
+ max-height: 500px;
+ transform: translateY(0);
+ }
+}
+
+/* 统计卡片 */
+.stat-card-small {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+ border-radius: 8px;
+ transition: all 0.3s;
+}
+
+.stat-card-small:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+ transform: translateY(-2px);
+}
+
+.stat-card-small :global(.ant-statistic-title) {
+ font-size: 13px;
+ color: rgba(0, 0, 0, 0.65);
+}
+
+.stat-card-small :global(.ant-statistic-content) {
+ font-size: 24px;
+ font-weight: 600;
+}
+
+/* 卡片激活状态 */
+.stat-card-active {
+ border: 2px solid #1677ff;
+ background: linear-gradient(135deg, #e6f4ff 0%, #f0f5ff 100%);
+ box-shadow: 0 4px 16px rgba(22, 119, 255, 0.2);
+}
+
+.stat-card-active:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 6px 20px rgba(22, 119, 255, 0.3);
+}
+
+/* 卡片变暗状态(非激活状态下其他卡片) */
+.stat-card-dimmed {
+ opacity: 0.5;
+ filter: grayscale(0.3);
+}
+
+.stat-card-dimmed:hover {
+ opacity: 0.7;
+}
+
+/* 筛选结果卡片(不可点击) */
+.stat-card-result {
+ cursor: default !important;
+}
+
+.stat-card-result:hover {
+ transform: none !important;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06) !important;
+}
+
+/* 操作栏 */
+.action-bar {
+ position: sticky;
+ top: 0;
+ z-index: 10;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 16px;
+ padding: 16px;
+ background: #ffffff;
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+}
+
+.action-bar-left,
+.action-bar-right {
+ display: flex;
+ gap: 12px;
+ align-items: center;
+}
+
+/* 搜索和筛选组合 - 使用 Space.Compact */
+.action-bar-right :global(.ant-space-compact) {
+ display: flex;
+}
+
+.action-bar-right :global(.ant-space-compact .ant-input-search) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.action-bar-right :global(.ant-space-compact > .ant-btn) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+/* 筛选弹出框内容 */
+.filter-popover-content {
+ width: 320px;
+ max-height: 500px;
+ overflow-y: auto;
+}
+
+.filter-popover-content .selected-filters {
+ min-height: 40px;
+ padding: 12px;
+ background: #f5f7fa;
+ border-radius: 6px;
+ border: 1px dashed #d9d9d9;
+}
+
+.filter-popover-content .filter-tag {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+
+.filter-popover-content .filter-label {
+ font-size: 13px;
+ color: rgba(0, 0, 0, 0.65);
+ font-weight: 500;
+}
+
+.filter-popover-content .filter-placeholder {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 24px;
+}
+
+.filter-popover-content .group-tree-container {
+ max-height: 280px;
+ overflow-y: auto;
+}
+
+.filter-popover-content .tree-header {
+ font-size: 14px;
+ font-weight: 500;
+ margin-bottom: 12px;
+ color: rgba(0, 0, 0, 0.85);
+}
+
+.filter-popover-content .filter-actions {
+ display: flex;
+ justify-content: flex-end;
+}
+
+/* 弹出框样式 */
+:global(.filter-popover .ant-popover-inner) {
+ padding: 0;
+}
+
+:global(.filter-popover .ant-popover-title) {
+ padding: 12px 16px;
+ border-bottom: 1px solid #f0f0f0;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: #ffffff;
+ font-weight: 500;
+}
+
+:global(.filter-popover .ant-popover-inner-content) {
+ padding: 16px;
+}
+
+/* 数据统计 */
+.data-stats {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 16px;
+ margin-bottom: 16px;
+}
+
+.stat-card-small {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+ border-radius: 8px;
+ transition: all 0.3s;
+}
+
+.stat-card-small:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+ transform: translateY(-2px);
+}
+
+.stat-card-small :global(.ant-statistic-title) {
+ font-size: 13px;
+ color: rgba(0, 0, 0, 0.65);
+}
+
+.stat-card-small :global(.ant-statistic-content) {
+ font-size: 24px;
+ font-weight: 600;
+}
+
+/* 表格容器 */
+.table-container {
+ background: #ffffff;
+ border-radius: 8px;
+ padding: 16px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+}
+
+.host-name {
+ font-weight: 500;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+.host-list-page :global(.ant-table-row) {
+ cursor: pointer;
+ transition: all 0.3s;
+}
+
+.host-list-page :global(.ant-table-row:hover) {
+ background: #f5f5f5;
+}
+
+.host-list-page :global(.ant-table-row.row-selected) {
+ background: #e6f4ff;
+}
+
+/* 操作列样式优化 - 重新设计 */
+.host-list-page :global(.ant-table-thead > tr > th:last-child) {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
+ color: #ffffff !important;
+ font-weight: 600;
+ border-left: 2px solid #e8e8e8;
+}
+
+.host-list-page :global(.ant-table-tbody > tr > td:last-child) {
+ background: #f8f9ff !important;
+ border-left: 2px solid #e8e8e8;
+ box-shadow: -2px 0 4px rgba(0, 0, 0, 0.02);
+}
+
+.host-list-page :global(.ant-table-tbody > tr:hover > td:last-child) {
+ background: #eef0ff !important;
+}
+
+.host-list-page :global(.ant-table-tbody > tr.row-selected > td:last-child) {
+ background: #e1e6ff !important;
+}
+
+/* 详情抽屉 */
+.detail-drawer-content {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+/* 顶部信息区域 - 固定不滚动 */
+.detail-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 16px 24px;
+ background: #fafafa;
+ border-bottom: 1px solid #f0f0f0;
+ flex-shrink: 0;
+}
+
+.detail-header-left {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+.close-button {
+ font-size: 18px;
+ color: #666;
+}
+
+.close-button:hover {
+ color: #1677ff;
+}
+
+.header-info {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+
+.host-title {
+ margin: 0;
+ font-size: 18px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+.detail-header-right {
+ flex: 1;
+ display: flex;
+ justify-content: flex-end;
+}
+
+/* 可滚动内容区域 */
+.detail-scrollable-content {
+ flex: 1;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+/* 主机信息面板 */
+.detail-info-panel {
+ padding: 24px;
+ background: #ffffff;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.info-item {
+ display: flex;
+ gap: 8px;
+ font-size: 13px;
+}
+
+.info-label {
+ color: rgba(0, 0, 0, 0.65);
+ white-space: nowrap;
+}
+
+.info-value {
+ color: rgba(0, 0, 0, 0.88);
+ font-weight: 500;
+}
+
+/* 操作按钮区 */
+.detail-actions {
+ margin-top: 20px;
+ padding-top: 20px;
+ border-top: 1px solid #f0f0f0;
+}
+
+/* 标签页区域 */
+.detail-tabs {
+ background: #ffffff;
+ padding-top: 16px;
+ padding-left: 12px;
+ min-height: 400px;
+}
+
+.detail-tabs :global(.ant-tabs) {
+ height: 100%;
+}
+
+.detail-tabs :global(.ant-tabs-content-holder) {
+ overflow: visible;
+}
+
+.detail-tabs :global(.ant-tabs-nav) {
+ padding: 0;
+ margin: 0 24px;
+ margin-bottom: 0;
+ background: transparent;
+}
+
+.detail-tabs :global(.ant-tabs-nav::before) {
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.detail-tabs :global(.ant-tabs-tab) {
+ padding: 12px 0;
+ margin: 0 32px 0 0;
+ font-size: 14px;
+ font-weight: 500;
+}
+
+.detail-tabs :global(.ant-tabs-tab:first-child) {
+ margin-left: 0;
+}
+
+.detail-tabs :global(.ant-tabs-tab-active .ant-tabs-tab-btn) {
+ color: #d946ef;
+}
+
+.detail-tabs :global(.ant-tabs-ink-bar) {
+ background: #d946ef;
+ height: 3px;
+}
+
+.tab-content {
+ padding: 24px;
+ background: #ffffff;
+}
+
+/* 卡片列表 */
+.card-list {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+}
+
+/* 镜像卡片 */
+.image-card {
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+ transition: all 0.3s;
+}
+
+.image-card:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+}
+
+.card-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.card-header h4 {
+ margin: 0;
+ font-size: 15px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+.card-info-item {
+ display: flex;
+ font-size: 13px;
+ line-height: 1.6;
+}
+
+.card-label {
+ color: rgba(0, 0, 0, 0.65);
+ white-space: nowrap;
+}
+
+.card-value {
+ color: rgba(0, 0, 0, 0.88);
+ flex: 1;
+}
+
+/* 用户卡片 */
+.user-card {
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+ transition: all 0.3s;
+}
+
+.user-card:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+}
+
+.user-header-info {
+ flex: 1;
+}
+
+.user-sequence {
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.45);
+ margin-bottom: 4px;
+}
+
+.user-name-group {
+ display: flex;
+ align-items: center;
+ font-size: 13px;
+}
+
+.user-label {
+ color: rgba(0, 0, 0, 0.65);
+}
+
+.user-value {
+ color: rgba(0, 0, 0, 0.88);
+ font-weight: 500;
+}
+
+.user-images {
+ background: #fafafa;
+ padding: 12px;
+ border-radius: 6px;
+}
+
+.images-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+/* 旧版详情抽屉样式(保留用于编辑抽屉) */
+.detail-content {
+ padding: 8px 0;
+}
+
+.status-card {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ border-radius: 12px;
+ padding: 16px;
+ margin-bottom: 16px;
+}
+
+.status-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 16px;
+}
+
+.status-header h3 {
+ font-size: 20px;
+ font-weight: 600;
+ color: #ffffff;
+ margin: 0;
+}
+
+.status-header :global(.ant-badge-status-text) {
+ color: #ffffff;
+ font-size: 14px;
+}
+
+.status-actions {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 12px;
+}
+
+.status-actions button {
+ height: 40px;
+}
+
+.info-section {
+ margin-bottom: 16px;
+}
+
+.section-title {
+ font-size: 15px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.88);
+ margin-bottom: 12px;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+
+.section-title::before {
+ content: '';
+ width: 3px;
+ height: 16px;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ border-radius: 2px;
+}
+
+/* 响应式 */
+@media (max-width: 1200px) {
+ .stats-panel :global(.ant-row) {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ }
+}
+
+@media (max-width: 768px) {
+ .action-bar {
+ flex-direction: column;
+ gap: 12px;
+ align-items: stretch;
+ }
+
+ .action-bar-left,
+ .action-bar-right {
+ flex-wrap: wrap;
+ }
+
+ .stats-panel :global(.ant-row) {
+ grid-template-columns: 1fr;
+ }
+}
diff --git a/src/pages/HostListPage.jsx b/src/pages/HostListPage.jsx
new file mode 100644
index 0000000..d96e1c4
--- /dev/null
+++ b/src/pages/HostListPage.jsx
@@ -0,0 +1,1073 @@
+import { useState } from 'react'
+import {
+ Table,
+ Input,
+ Button,
+ Tag,
+ Badge,
+ Drawer,
+ Tree,
+ Dropdown,
+ Space,
+ Checkbox,
+ Form,
+ Select,
+ Divider,
+ Descriptions,
+ Card,
+ Row,
+ Col,
+ Statistic,
+ Popover,
+ Tabs,
+} from 'antd'
+import {
+ CloudServerOutlined,
+ SearchOutlined,
+ FilterOutlined,
+ PlusOutlined,
+ ReloadOutlined,
+ PoweroffOutlined,
+ EditOutlined,
+ DeleteOutlined,
+ MoreOutlined,
+ CloseOutlined,
+ CheckCircleOutlined,
+ CloseCircleOutlined,
+ DesktopOutlined,
+ DatabaseOutlined,
+ ClockCircleOutlined,
+ UserOutlined,
+} from '@ant-design/icons'
+import PageTitleBar from '../components/PageTitleBar/PageTitleBar'
+import ConfirmDialog from '../components/ConfirmDialog/ConfirmDialog'
+import Toast from '../components/Toast/Toast'
+import hostData from '../data/hostData.json'
+import './HostListPage.css'
+
+const { Search } = Input
+
+function HostListPage() {
+ const [selectedRowKeys, setSelectedRowKeys] = useState([])
+ const [selectedHost, setSelectedHost] = useState(null)
+ const [showFilterPopover, setShowFilterPopover] = useState(false)
+ const [showDetailDrawer, setShowDetailDrawer] = useState(false)
+ const [showEditDrawer, setShowEditDrawer] = useState(false)
+ const [editMode, setEditMode] = useState('add') // 'add' or 'edit'
+ const [searchKeyword, setSearchKeyword] = useState('')
+ const [selectedGroup, setSelectedGroup] = useState(null)
+ const [selectedGroupName, setSelectedGroupName] = useState('') // 保存选中分组名称
+ const [tempSelectedGroup, setTempSelectedGroup] = useState(null) // 临时选择
+ const [filteredHosts, setFilteredHosts] = useState(hostData.hosts)
+ const [showStatsPanel, setShowStatsPanel] = useState(true) // 控制信息面板显示
+ const [statusFilter, setStatusFilter] = useState(null) // 'online', 'offline', null (all)
+
+ // 表格列定义
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ key: 'id',
+ width: 80,
+ align: 'center',
+ },
+ {
+ title: '终端名',
+ dataIndex: 'name',
+ key: 'name',
+ width: 180,
+ render: (text, record) => (
+
+
+ {text}
+
+ ),
+ },
+ {
+ title: 'MAC地址',
+ dataIndex: 'mac',
+ key: 'mac',
+ width: 160,
+ },
+ {
+ title: '终端分组',
+ dataIndex: 'group',
+ key: 'group',
+ width: 150,
+ render: (text) => {text},
+ },
+ {
+ title: '状态',
+ dataIndex: 'status',
+ key: 'status',
+ width: 100,
+ align: 'center',
+ render: (status) => (
+
+ {status === 'online' ? '在线' : '离线'}
+
+ }
+ />
+ ),
+ },
+ {
+ title: 'IP地址',
+ dataIndex: 'ip',
+ key: 'ip',
+ width: 140,
+ },
+ {
+ title: '数据盘容量',
+ dataIndex: 'dataDisk',
+ key: 'dataDisk',
+ width: 120,
+ align: 'center',
+ },
+ {
+ title: '系统盘容量',
+ dataIndex: 'systemDisk',
+ key: 'systemDisk',
+ width: 120,
+ align: 'center',
+ },
+ {
+ title: '上次开机时间',
+ dataIndex: 'lastOnline',
+ key: 'lastOnline',
+ width: 180,
+ align: 'center',
+ },
+ {
+ title: '操作',
+ key: 'action',
+ width: 180,
+ fixed: 'right',
+ render: (_, record) => (
+ e.stopPropagation()}>
+ }
+ disabled={record.status === 'offline'}
+ >
+ {record.status === 'online' ? '关机' : '开机'}
+
+ ,
+ },
+ {
+ key: 'restart',
+ label: '重启',
+ icon: ,
+ disabled: record.status === 'offline',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ key: 'delete',
+ label: '删除',
+ icon: ,
+ danger: true,
+ },
+ ],
+ onClick: ({ key }) => handleMenuClick(key, record),
+ }}
+ >
+ }>
+ 更多
+
+
+
+ ),
+ },
+ ]
+
+ // 行选择配置
+ const rowSelection = {
+ selectedRowKeys,
+ onChange: (newSelectedRowKeys) => {
+ setSelectedRowKeys(newSelectedRowKeys)
+ },
+ }
+
+ // 处理搜索
+ const handleSearch = (value) => {
+ setSearchKeyword(value)
+ filterHosts(value, selectedGroup)
+ }
+
+ // 处理分组选择
+ const handleGroupSelect = (selectedKeys, info) => {
+ const groupId = selectedKeys[0]
+ setTempSelectedGroup(groupId)
+ }
+
+ // 确认筛选
+ const handleConfirmFilter = () => {
+ setSelectedGroup(tempSelectedGroup)
+ // 获取分组名称
+ const findGroupName = (nodes, id) => {
+ for (const node of nodes) {
+ if (node.id === id) return node.name
+ if (node.children) {
+ const found = findGroupName(node.children, id)
+ if (found) return found
+ }
+ }
+ return null
+ }
+ const groupName = tempSelectedGroup ? findGroupName(hostData.hostGroups, tempSelectedGroup) : ''
+ setSelectedGroupName(groupName)
+ filterHosts(searchKeyword, tempSelectedGroup)
+ setShowFilterPopover(false)
+ }
+
+ // 清除筛选
+ const handleClearFilter = () => {
+ setTempSelectedGroup(null)
+ setSelectedGroup(null)
+ setSelectedGroupName('')
+ filterHosts(searchKeyword, null)
+ setShowFilterPopover(false)
+ }
+
+ // 过滤主机
+ const filterHosts = (keyword, groupId, status = statusFilter) => {
+ let filtered = hostData.hosts
+
+ if (keyword) {
+ filtered = filtered.filter(
+ (host) =>
+ host.name.toLowerCase().includes(keyword.toLowerCase()) ||
+ host.ip.includes(keyword) ||
+ host.mac.includes(keyword)
+ )
+ }
+
+ if (groupId) {
+ filtered = filtered.filter((host) => host.groupId === groupId)
+ }
+
+ if (status) {
+ filtered = filtered.filter((host) => host.status === status)
+ }
+
+ setFilteredHosts(filtered)
+ }
+
+ // 处理状态筛选卡片点击
+ const handleStatusFilterClick = (status) => {
+ const newStatusFilter = statusFilter === status ? null : status
+ setStatusFilter(newStatusFilter)
+ filterHosts(searchKeyword, selectedGroup, newStatusFilter)
+ }
+
+ // 处理总数卡片点击(清除状态筛选)
+ const handleTotalClick = () => {
+ if (statusFilter !== null) {
+ setStatusFilter(null)
+ filterHosts(searchKeyword, selectedGroup, null)
+ }
+ }
+
+ // 删除单个主机
+ const handleDeleteHost = (record) => {
+ ConfirmDialog.delete({
+ itemName: `主机名:${record.name}`,
+ itemInfo: `IP地址:${record.ip}`,
+ onOk() {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ // 模拟删除操作
+ const newHosts = filteredHosts.filter((h) => h.id !== record.id)
+ setFilteredHosts(newHosts)
+ resolve()
+ Toast.success('删除成功', `主机 "${record.name}" 已成功删除`)
+ }, 1000)
+ })
+ },
+ })
+ }
+
+ // 批量删除主机
+ const handleBatchDelete = () => {
+ const selectedHosts = filteredHosts.filter((h) => selectedRowKeys.includes(h.id))
+ const items = selectedHosts.map((host) => ({
+ name: host.name,
+ info: host.ip,
+ }))
+
+ ConfirmDialog.batchDelete({
+ count: selectedRowKeys.length,
+ items,
+ onOk() {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ const count = selectedRowKeys.length
+ // 模拟批量删除操作
+ const newHosts = filteredHosts.filter((h) => !selectedRowKeys.includes(h.id))
+ setFilteredHosts(newHosts)
+ setSelectedRowKeys([])
+ resolve()
+ Toast.success('批量删除成功', `已成功删除 ${count} 台主机`)
+ }, 1000)
+ })
+ },
+ })
+ }
+
+ // 处理菜单点击
+ const handleMenuClick = (key, record) => {
+ if (key === 'edit') {
+ setSelectedHost(record)
+ setEditMode('edit')
+ setShowDetailDrawer(false) // 关闭详情抽屉
+ setShowEditDrawer(true)
+ } else if (key === 'delete') {
+ handleDeleteHost(record)
+ }
+ console.log(key, record)
+ }
+
+ // 处理行点击
+ const handleRowClick = (record) => {
+ setSelectedHost(record)
+ setShowEditDrawer(false) // 关闭编辑抽屉
+ setShowDetailDrawer(true)
+ }
+
+ // 转换树数据
+ const convertTreeData = (nodes) => {
+ return nodes.map((node) => ({
+ title: node.name,
+ key: node.id,
+ children: node.children ? convertTreeData(node.children) : undefined,
+ }))
+ }
+
+ const treeData = convertTreeData(hostData.hostGroups)
+
+ // 高级筛选面板内容
+ const filterContent = (
+
+
+ {tempSelectedGroup ? (
+
+ 已选择分组:
+ setTempSelectedGroup(null)}>
+ {(() => {
+ const findName = (nodes, id) => {
+ for (const node of nodes) {
+ if (node.id === id) return node.name
+ if (node.children) {
+ const found = findName(node.children, id)
+ if (found) return found
+ }
+ }
+ return ''
+ }
+ return findName(hostData.hostGroups, tempSelectedGroup)
+ })()}
+
+
+ ) : (
+
+ 请选择终端分组进行筛选
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+ )
+
+ return (
+
+ {/* 页面标题栏 */}
+
setShowStatsPanel(expanded)}
+ />
+
+ {/* 数据统计面板 - 可折叠 */}
+ {showStatsPanel && (
+
+
+
+
+ }
+ valueStyle={{ color: '#1677ff' }}
+ />
+
+
+
+ handleStatusFilterClick('online')}
+ style={{ cursor: 'pointer' }}
+ >
+ h.status === 'online').length}
+ prefix={}
+ valueStyle={{ color: '#52c41a' }}
+ />
+
+
+
+ handleStatusFilterClick('offline')}
+ style={{ cursor: 'pointer' }}
+ >
+ h.status === 'offline').length}
+ prefix={}
+ valueStyle={{ color: '#8c8c8c' }}
+ />
+
+
+
+
+ }
+ valueStyle={{ color: '#faad14' }}
+ />
+
+
+
+
+ )}
+
+ {/* 操作栏 */}
+
+
+ }
+ onClick={() => {
+ setEditMode('add')
+ setSelectedHost(null)
+ setShowDetailDrawer(false) // 关闭详情抽屉
+ setShowEditDrawer(true)
+ }}
+ >
+ 新增主机
+
+ }
+ disabled={selectedRowKeys.length === 0}
+ >
+ 批量开机
+
+ }
+ disabled={selectedRowKeys.length === 0}
+ >
+ 批量关机
+
+ } disabled={selectedRowKeys.length === 0} danger onClick={handleBatchDelete}>
+ 批量删除
+
+
+
+
+ handleSearch(e.target.value)}
+ value={searchKeyword}
+ />
+
+
+ 高级筛选
+
+ }
+ trigger="click"
+ open={showFilterPopover}
+ onOpenChange={(visible) => {
+ setShowFilterPopover(visible)
+ if (visible) {
+ setTempSelectedGroup(selectedGroup)
+ }
+ }}
+ placement="bottomRight"
+ overlayClassName="filter-popover"
+ >
+
}
+ type={selectedGroup ? 'primary' : 'default'}
+ >
+ {selectedGroupName || '筛选'}
+
+
+
+
}>刷新
+
+
+
+ {/* 数据表格 */}
+
+
`共 ${total} 条`,
+ }}
+ scroll={{ x: 1600 }}
+ onRow={(record) => ({
+ onClick: () => handleRowClick(record),
+ className: selectedHost?.id === record.id ? 'row-selected' : '',
+ })}
+ />
+
+
+ {/* 详情抽屉 */}
+ setShowDetailDrawer(false)}
+ open={showDetailDrawer}
+ closable={false}
+ styles={{ body: { padding: 0 } }}
+ >
+ {selectedHost && (
+
+ {/* 顶部标题栏 */}
+
+
+
}
+ onClick={() => setShowDetailDrawer(false)}
+ className="close-button"
+ />
+
+
{selectedHost.name}
+
+ {selectedHost.status === 'online' ? '在线' : '离线'}
+
+ }
+ />
+
+
+
+
+ }
+ onClick={() => {
+ setEditMode('edit')
+ setShowEditDrawer(true)
+ setShowDetailDrawer(false)
+ }}
+ >
+ 编辑
+
+ }
+ danger
+ onClick={() => {
+ setShowDetailDrawer(false)
+ handleDeleteHost(selectedHost)
+ }}
+ >
+ 删除
+
+
+
+
+
+ {/* 可滚动内容区域 */}
+
+ {/* 主机信息面板 */}
+
+
+
+
+
终端名称:
+
{selectedHost.name}
+
+
+
+
+
终端分组:
+
{selectedHost.group}
+
+
+
+
+
MAC地址:
+
{selectedHost.mac}
+
+
+
+
+
+
+
+
IP地址:
+
{selectedHost.ip}
+
+
+
+
+
+
+
+
终端状态:
+
+
+ {selectedHost.status === 'online' ? '在线' : '离线'}
+
+
+
+
+
+
+
系统盘总容量:
+
{selectedHost.systemDisk}
+
+
+
+
+
数据盘总容量:
+
{selectedHost.dataDisk}
+
+
+
+
+
+
+
+ {/* 操作按钮区 */}
+
+
+ }
+ disabled={selectedHost.status === 'offline'}
+ >
+ {selectedHost.status === 'online' ? '关机' : '开机'}
+
+ } disabled={selectedHost.status === 'offline'}>
+ 重启
+
+
+
+
+
+
+
+
+
+ {/* 标签页区域 */}
+
+
+
+ 终端镜像
+
+ ),
+ children: (
+
+ {/* 镜像卡片列表 */}
+
+
+
+
win10开发勾删
+
+
+
+
+
+
+
+
+
+ 虚拟机规格:
+ CPU:4核,内存:4GB,系统盘:120GB
+
+
+
+
+ 系统镜像:
+ windows-10
+
+
+
+
+ 操作系统:
+ Windows
+
+
+
+
+ 版本号:
+ win10-64
+
+
+
+
+ 创建时间:
+ 2025-10-15 01:10:37
+
+
+
+
+ 下发状态:
+
+ 已下发
+
+
+
+
+
+ 下发方式:
+ 自动下载
+
+
+
+
+ 关联用户:
+ 3
+
+
+
+
+ 描述:
+ --
+
+
+
+
+
+
+ ),
+ },
+ {
+ key: 'users',
+ label: (
+
+
+ 终端用户
+
+ ),
+ children: (
+
+ {/* 用户卡片列表 */}
+
+
+
+
+
+
+
+
序号:1
+
+ 用户名:
+ nex
+
+ 姓名:
+
+ nex
+
+ 用户分组:
+
+ 默认组织
+
+ 启停用:
+
+ 启用
+
+
+
+
+
+
+
+
+
+
+
+ 绑定镜像
+
+
+
+
+
+
+
+ 镜像名称:
+ win10开发勾删
+
+
+
+
+ 系统镜像:
+ windows-10
+
+
+
+
+ 操作系统:
+ Windows
+
+
+
+
+ 创建时间:
+ 2025-10-15 01:10:37
+
+
+
+
+ 下发状态:
+
+ 已下发
+
+
+
+
+
+ 下发方式:
+ 自动下载
+
+
+
+
+
+
+ {/* 更多用户卡片 */}
+
+
+
+
+
+
+
序号:2
+
+ 用户名:
+ admin
+
+ 姓名:
+
+ admin
+
+ 用户分组:
+
+ 默认组织
+
+ 启停用:
+
+ 停用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
序号:3
+
+ 用户名:
+ user
+
+ 姓名:
+
+ user
+
+ 用户分组:
+
+ 默认组织
+
+ 启停用:
+
+ 停用
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ ]}
+ />
+
+
+
+ )}
+
+
+ {/* 新增/编辑抽屉 */}
+
+
+ {editMode === 'add' ? '新增主机' : '编辑主机'}
+
+ }
+ placement="right"
+ width={720}
+ onClose={() => setShowEditDrawer(false)}
+ open={showEditDrawer}
+ extra={
+
+
+
+
+ }
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default HostListPage
diff --git a/src/pages/ImageListPage.css b/src/pages/ImageListPage.css
new file mode 100644
index 0000000..fa91f66
--- /dev/null
+++ b/src/pages/ImageListPage.css
@@ -0,0 +1,165 @@
+.image-list-page {
+ width: 100%;
+}
+
+/* 操作栏 */
+.action-bar {
+ position: sticky;
+ top: 0;
+ z-index: 10;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 16px;
+ padding: 16px;
+ background: #ffffff;
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+}
+
+.action-bar-left,
+.action-bar-right {
+ display: flex;
+ gap: 12px;
+ align-items: center;
+}
+
+/* 表格容器 */
+.table-container {
+ background: #ffffff;
+ border-radius: 8px;
+ padding: 16px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+}
+
+.image-list-page :global(.ant-table-row) {
+ cursor: pointer;
+ transition: all 0.3s;
+}
+
+.image-list-page :global(.ant-table-row:hover) {
+ background: #f5f5f5;
+}
+
+.image-list-page :global(.ant-table-row.row-selected) {
+ background: #e6f4ff;
+}
+
+/* 操作列样式优化 - 重新设计 */
+.image-list-page :global(.ant-table-thead > tr > th:last-child) {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
+ color: #ffffff !important;
+ font-weight: 600;
+ border-left: 2px solid #e8e8e8;
+}
+
+.image-list-page :global(.ant-table-tbody > tr > td:last-child) {
+ background: #f8f9ff !important;
+ border-left: 2px solid #e8e8e8;
+ box-shadow: -2px 0 4px rgba(0, 0, 0, 0.02);
+}
+
+.image-list-page :global(.ant-table-tbody > tr:hover > td:last-child) {
+ background: #eef0ff !important;
+}
+
+.image-list-page :global(.ant-table-tbody > tr.row-selected > td:last-child) {
+ background: #e1e6ff !important;
+}
+
+/* 详情抽屉 */
+.detail-drawer-content {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+/* 顶部信息区域 - 固定不滚动 */
+.detail-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 16px 24px;
+ background: #fafafa;
+ border-bottom: 1px solid #f0f0f0;
+ flex-shrink: 0;
+}
+
+.detail-header-left {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+.close-button {
+ font-size: 18px;
+ color: #666;
+}
+
+.close-button:hover {
+ color: #1677ff;
+}
+
+.header-info {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+
+.image-title {
+ margin: 0;
+ font-size: 18px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+.detail-header-right {
+ flex: 1;
+ display: flex;
+ justify-content: flex-end;
+}
+
+/* 可滚动内容区域 */
+.detail-scrollable-content {
+ flex: 1;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+/* 镜像信息面板 */
+.detail-info-panel {
+ padding: 24px;
+ background: #ffffff;
+}
+
+.info-item {
+ display: flex;
+ gap: 8px;
+ font-size: 13px;
+}
+
+.info-label {
+ color: rgba(0, 0, 0, 0.65);
+ white-space: nowrap;
+ min-width: 120px;
+}
+
+.info-value {
+ color: rgba(0, 0, 0, 0.88);
+ font-weight: 500;
+ word-break: break-all;
+}
+
+/* 响应式 */
+@media (max-width: 768px) {
+ .action-bar {
+ flex-direction: column;
+ gap: 12px;
+ align-items: stretch;
+ }
+
+ .action-bar-left,
+ .action-bar-right {
+ flex-wrap: wrap;
+ }
+}
diff --git a/src/pages/ImageListPage.jsx b/src/pages/ImageListPage.jsx
new file mode 100644
index 0000000..056a983
--- /dev/null
+++ b/src/pages/ImageListPage.jsx
@@ -0,0 +1,343 @@
+import { useState } from 'react'
+import {
+ Table,
+ Input,
+ Button,
+ Space,
+ Drawer,
+ Row,
+ Col,
+} from 'antd'
+import {
+ SearchOutlined,
+ PlusOutlined,
+ DownloadOutlined,
+ EyeOutlined,
+ DeleteOutlined,
+ CloseOutlined,
+} from '@ant-design/icons'
+import PageTitleBar from '../components/PageTitleBar/PageTitleBar'
+import ConfirmDialog from '../components/ConfirmDialog/ConfirmDialog'
+import Toast from '../components/Toast/Toast'
+import imageData from '../data/imageData.json'
+import './ImageListPage.css'
+
+const { Search } = Input
+
+function ImageListPage() {
+ const [selectedRowKeys, setSelectedRowKeys] = useState([])
+ const [selectedImage, setSelectedImage] = useState(null)
+ const [showDetailDrawer, setShowDetailDrawer] = useState(false)
+ const [searchKeyword, setSearchKeyword] = useState('')
+ const [filteredImages, setFilteredImages] = useState(imageData.images)
+
+ // 表格列定义
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ key: 'id',
+ width: 80,
+ align: 'center',
+ },
+ {
+ title: '名称',
+ dataIndex: 'name',
+ key: 'name',
+ width: 350,
+ ellipsis: true,
+ },
+ {
+ title: '操作系统',
+ dataIndex: 'os',
+ key: 'os',
+ width: 120,
+ },
+ {
+ title: '镜像版本',
+ dataIndex: 'version',
+ key: 'version',
+ width: 120,
+ },
+ {
+ title: '上传时间',
+ dataIndex: 'uploadTime',
+ key: 'uploadTime',
+ width: 180,
+ },
+ {
+ title: '操作',
+ key: 'action',
+ width: 220,
+ fixed: 'right',
+ render: (_, record) => (
+ e.stopPropagation()}>
+ }>
+ 下载
+
+ }
+ onClick={() => handleViewDetail(record)}
+ >
+ 详情
+
+ }
+ danger
+ onClick={() => handleDeleteImage(record)}
+ >
+ 删除
+
+
+ ),
+ },
+ ]
+
+ // 行选择配置
+ const rowSelection = {
+ selectedRowKeys,
+ onChange: (newSelectedRowKeys) => {
+ setSelectedRowKeys(newSelectedRowKeys)
+ },
+ }
+
+ // 处理搜索
+ const handleSearch = (value) => {
+ setSearchKeyword(value)
+ if (value) {
+ const filtered = imageData.images.filter(
+ (image) =>
+ image.name.toLowerCase().includes(value.toLowerCase()) ||
+ image.os.toLowerCase().includes(value.toLowerCase())
+ )
+ setFilteredImages(filtered)
+ } else {
+ setFilteredImages(imageData.images)
+ }
+ }
+
+ // 查看详情
+ const handleViewDetail = (record) => {
+ setSelectedImage(record)
+ setShowDetailDrawer(true)
+ }
+
+ // 处理行点击
+ const handleRowClick = (record) => {
+ setSelectedImage(record)
+ setShowDetailDrawer(true)
+ }
+
+ // 删除镜像
+ const handleDeleteImage = (record) => {
+ ConfirmDialog.delete({
+ itemName: `镜像名称:${record.name}`,
+ itemInfo: `文件名:${record.fileName}`,
+ onOk() {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ const newImages = filteredImages.filter((img) => img.id !== record.id)
+ setFilteredImages(newImages)
+ resolve()
+ Toast.success('删除成功', `镜像 "${record.name}" 已成功删除`)
+ }, 1000)
+ })
+ },
+ })
+ }
+
+ // 批量删除
+ const handleBatchDelete = () => {
+ const selectedImages = filteredImages.filter((img) => selectedRowKeys.includes(img.id))
+ const items = selectedImages.map((image) => ({
+ name: image.name,
+ info: image.fileName,
+ }))
+
+ ConfirmDialog.batchDelete({
+ count: selectedRowKeys.length,
+ items,
+ onOk() {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ const count = selectedRowKeys.length
+ const newImages = filteredImages.filter((img) => !selectedRowKeys.includes(img.id))
+ setFilteredImages(newImages)
+ setSelectedRowKeys([])
+ resolve()
+ Toast.success('批量删除成功', `已成功删除 ${count} 个镜像`)
+ }, 1000)
+ })
+ },
+ })
+ }
+
+ return (
+
+ {/* 页面标题栏 */}
+
+
+ {/* 操作栏 */}
+
+
+ }>
+ 新建
+
+ } disabled={selectedRowKeys.length === 0} danger onClick={handleBatchDelete}>
+ 批量删除
+
+
+
+ handleSearch(e.target.value)}
+ value={searchKeyword}
+ />
+
+
+
+ {/* 数据表格 */}
+
+
`共 ${total} 条记录`,
+ }}
+ scroll={{ x: 1200 }}
+ onRow={(record) => ({
+ onClick: () => handleRowClick(record),
+ className: selectedImage?.id === record.id ? 'row-selected' : '',
+ })}
+ />
+
+
+ {/* 详情抽屉 */}
+ setShowDetailDrawer(false)}
+ open={showDetailDrawer}
+ closable={false}
+ styles={{ body: { padding: 0 } }}
+ >
+ {selectedImage && (
+
+ {/* 顶部标题栏 */}
+
+
+
}
+ onClick={() => setShowDetailDrawer(false)}
+ className="close-button"
+ />
+
+
{selectedImage.name}
+
+
+
+
+ }>下载
+ }
+ danger
+ onClick={() => {
+ setShowDetailDrawer(false)
+ handleDeleteImage(selectedImage)
+ }}
+ >
+ 删除
+
+
+
+
+
+ {/* 可滚动内容区域 */}
+
+ {/* 镜像信息面板 */}
+
+
+
+
+
镜像名称:
+
{selectedImage.name}
+
+
+
+
+
镜像文件:
+
{selectedImage.fileName}
+
+
+
+
+
镜像版本:
+
{selectedImage.version}
+
+
+
+
+
操作系统:
+
{selectedImage.os}
+
+
+
+
+
镜像状态:
+
{selectedImage.status}
+
+
+
+
+
上传时间:
+
{selectedImage.uploadTime}
+
+
+
+
+
镜像存放路径:
+
{selectedImage.filePath}
+
+
+
+
+
BT路径:
+
{selectedImage.btPath}
+
+
+
+
+
描述:
+
{selectedImage.description}
+
+
+
+
+
+
+ )}
+
+
+ )
+}
+
+export default ImageListPage
diff --git a/src/pages/OverviewPage.css b/src/pages/OverviewPage.css
new file mode 100644
index 0000000..fe0848f
--- /dev/null
+++ b/src/pages/OverviewPage.css
@@ -0,0 +1,145 @@
+.overview-page {
+ width: 100%;
+}
+
+/* 统计卡片样式保留 */
+.mb-6 {
+ margin-bottom: 24px;
+}
+
+.stat-card {
+ height: 100%;
+}
+
+.stat-card :global(.ant-statistic-title) {
+ color: rgba(0, 0, 0, 0.65);
+ font-size: 14px;
+ margin-bottom: 8px;
+}
+
+.stat-card :global(.ant-statistic-content) {
+ font-size: 24px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+.stat-trend {
+ margin-top: 12px;
+ padding-top: 12px;
+ border-top: 1px solid #f0f0f0;
+ display: flex;
+ align-items: center;
+}
+
+.stat-detail {
+ color: rgba(0, 0, 0, 0.45);
+ font-size: 12px;
+}
+
+.trend-up {
+ color: #52c41a;
+ font-size: 13px;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+}
+
+/* 快速链接 */
+.quick-links {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+}
+
+.quick-link-item {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 12px;
+ border-radius: 8px;
+ cursor: pointer;
+ transition: all 0.3s;
+}
+
+.quick-link-item:hover {
+ background: #fafafa;
+}
+
+.link-icon {
+ width: 48px;
+ height: 48px;
+ border-radius: 8px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 20px;
+}
+
+.link-info {
+ flex: 1;
+}
+
+.link-title {
+ font-size: 14px;
+ font-weight: 500;
+ color: rgba(0, 0, 0, 0.88);
+ margin-bottom: 4px;
+}
+
+.link-desc {
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.45);
+}
+
+/* 活动列表 */
+.activity-list {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+}
+
+.activity-item {
+ display: flex;
+ align-items: flex-start;
+ gap: 12px;
+ padding-bottom: 16px;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.activity-item:last-child {
+ border-bottom: none;
+ padding-bottom: 0;
+}
+
+.activity-dot {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ margin-top: 6px;
+ flex-shrink: 0;
+}
+
+.activity-content {
+ flex: 1;
+}
+
+.activity-text {
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.88);
+ margin-bottom: 4px;
+}
+
+.activity-time {
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.45);
+}
+
+/* 图表占位 */
+.chart-placeholder {
+ min-height: 300px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: #fafafa;
+ border-radius: 8px;
+}
\ No newline at end of file
diff --git a/src/pages/OverviewPage.jsx b/src/pages/OverviewPage.jsx
new file mode 100644
index 0000000..09cd1b1
--- /dev/null
+++ b/src/pages/OverviewPage.jsx
@@ -0,0 +1,247 @@
+import { Card, Row, Col, Statistic, Table, Tag, Badge } from 'antd'
+import {
+ DesktopOutlined,
+ MobileOutlined,
+ UserOutlined,
+ TeamOutlined,
+ WarningOutlined,
+ CheckCircleOutlined,
+ LinkOutlined,
+ ClockCircleOutlined,
+} from '@ant-design/icons'
+import PageTitleBar from '../components/PageTitleBar/PageTitleBar'
+import './OverviewPage.css'
+
+function OverviewPage() {
+ // 模拟报错信息数据
+ const errorColumns = [
+ {
+ title: '时间',
+ dataIndex: 'time',
+ key: 'time',
+ width: 180,
+ },
+ {
+ title: '错误类型',
+ dataIndex: 'type',
+ key: 'type',
+ width: 120,
+ render: (type) => (
+
+ {type}
+
+ ),
+ },
+ {
+ title: '错误信息',
+ dataIndex: 'message',
+ key: 'message',
+ ellipsis: true,
+ },
+ {
+ title: '状态',
+ dataIndex: 'status',
+ key: 'status',
+ width: 100,
+ render: (status) => (
+
+ ),
+ },
+ ]
+
+ const errorData = [
+ {
+ key: '1',
+ time: '2024-01-15 14:32:05',
+ type: '严重',
+ message: '网络配置服务连接超时',
+ status: '处理中',
+ },
+ {
+ key: '2',
+ time: '2024-01-15 13:20:18',
+ type: '警告',
+ message: '主机 192.168.1.101 CPU 使用率超过 85%',
+ status: '已处理',
+ },
+ {
+ key: '3',
+ time: '2024-01-15 12:15:42',
+ type: '信息',
+ message: '用户登录异常:连续失败 3 次',
+ status: '已处理',
+ },
+ {
+ key: '4',
+ time: '2024-01-15 11:08:30',
+ type: '警告',
+ message: '存储空间不足,剩余容量 < 10%',
+ status: '处理中',
+ },
+ ]
+
+ return (
+
+ {/* 页面标题区 */}
+
+
+
+ >
+ }
+ />
+
+ {/* 统计卡片 - 终端和用户情况 */}
+
+
+
+ }
+ suffix="台"
+ />
+
+ PC: 218台 | 移动: 124台
+
+
+
+
+
+
+ }
+ suffix="台"
+ />
+
+ 在线率: 83.9%
+
+
+
+
+
+
+ }
+ suffix="人"
+ />
+
+ 今日新增: 23人
+
+
+
+
+
+
+ }
+ suffix="人"
+ />
+
+ 活跃率: 67.2%
+
+
+
+
+
+ {/* 详细数据卡片 */}
+
+ {/* 近期报错信息 */}
+
+
+
+ 近期报错信息
+
+ }
+ extra={查看全部}
+ >
+
+
+
+
+ {/* 快速访问入口 */}
+
+
+
+ 快速访问
+
+ }
+ extra={更多}
+ >
+
+
+
+
+
+ {/* 图表区域 - 移除或保留作为终端统计 */}
+
+
+
+ 图表区域(可集成 ECharts、Recharts 等图表库展示终端接入趋势)
+
+
+
+
+ )
+}
+
+export default OverviewPage
\ No newline at end of file
diff --git a/src/pages/UserListPage.css b/src/pages/UserListPage.css
new file mode 100644
index 0000000..a0ef0ad
--- /dev/null
+++ b/src/pages/UserListPage.css
@@ -0,0 +1,455 @@
+.user-list-page {
+ width: 100%;
+}
+
+/* 统计面板 */
+.stats-panel {
+ margin-bottom: 16px;
+ animation: slideDown 0.3s ease;
+}
+
+@keyframes slideDown {
+ from {
+ opacity: 0;
+ max-height: 0;
+ transform: translateY(-10px);
+ }
+ to {
+ opacity: 1;
+ max-height: 500px;
+ transform: translateY(0);
+ }
+}
+
+/* 统计卡片 */
+.stat-card-small {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+ border-radius: 8px;
+ transition: all 0.3s;
+}
+
+.stat-card-small:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+ transform: translateY(-2px);
+}
+
+.stat-card-small :global(.ant-statistic-title) {
+ font-size: 13px;
+ color: rgba(0, 0, 0, 0.65);
+}
+
+.stat-card-small :global(.ant-statistic-content) {
+ font-size: 24px;
+ font-weight: 600;
+}
+
+/* 卡片激活状态 */
+.stat-card-active {
+ border: 2px solid #1677ff;
+ background: linear-gradient(135deg, #e6f4ff 0%, #f0f5ff 100%);
+ box-shadow: 0 4px 16px rgba(22, 119, 255, 0.2);
+}
+
+.stat-card-active:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 6px 20px rgba(22, 119, 255, 0.3);
+}
+
+/* 卡片变暗状态 */
+.stat-card-dimmed {
+ opacity: 0.5;
+ filter: grayscale(0.3);
+}
+
+.stat-card-dimmed:hover {
+ opacity: 0.7;
+}
+
+/* 筛选结果卡片 */
+.stat-card-result {
+ cursor: default !important;
+}
+
+.stat-card-result:hover {
+ transform: none !important;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06) !important;
+}
+
+/* 操作栏 */
+.action-bar {
+ position: sticky;
+ top: 0;
+ z-index: 10;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 16px;
+ padding: 16px;
+ background: #ffffff;
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+}
+
+.action-bar-left,
+.action-bar-right {
+ display: flex;
+ gap: 12px;
+ align-items: center;
+}
+
+/* 搜索和筛选组合 */
+.action-bar-right :global(.ant-space-compact) {
+ display: flex;
+}
+
+.action-bar-right :global(.ant-space-compact .ant-input-search) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.action-bar-right :global(.ant-space-compact > .ant-btn) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+/* 筛选弹出框内容 */
+.filter-popover-content {
+ width: 320px;
+ max-height: 500px;
+ overflow-y: auto;
+}
+
+.filter-popover-content .selected-filters {
+ min-height: 40px;
+ padding: 12px;
+ background: #f5f7fa;
+ border-radius: 6px;
+ border: 1px dashed #d9d9d9;
+}
+
+.filter-popover-content .filter-tag {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+
+.filter-popover-content .filter-label {
+ font-size: 13px;
+ color: rgba(0, 0, 0, 0.65);
+ font-weight: 500;
+}
+
+.filter-popover-content .filter-placeholder {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 24px;
+}
+
+.filter-popover-content .group-tree-container {
+ max-height: 280px;
+ overflow-y: auto;
+}
+
+.filter-popover-content .tree-header {
+ font-size: 14px;
+ font-weight: 500;
+ margin-bottom: 12px;
+ color: rgba(0, 0, 0, 0.85);
+}
+
+.filter-popover-content .filter-actions {
+ display: flex;
+ justify-content: flex-end;
+}
+
+/* 弹出框样式 */
+:global(.filter-popover .ant-popover-inner) {
+ padding: 0;
+}
+
+:global(.filter-popover .ant-popover-title) {
+ padding: 12px 16px;
+ border-bottom: 1px solid #f0f0f0;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: #ffffff;
+ font-weight: 500;
+}
+
+:global(.filter-popover .ant-popover-inner-content) {
+ padding: 16px;
+}
+
+/* 表格容器 */
+.table-container {
+ background: #ffffff;
+ border-radius: 8px;
+ padding: 16px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+}
+
+.user-name-text {
+ font-weight: 500;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+.user-list-page :global(.ant-table-row) {
+ cursor: pointer;
+ transition: all 0.3s;
+}
+
+.user-list-page :global(.ant-table-row:hover) {
+ background: #f5f5f5;
+}
+
+.user-list-page :global(.ant-table-row.row-selected) {
+ background: #e6f4ff;
+}
+
+/* 操作列样式优化 - 重新设计 */
+.user-list-page :global(.ant-table-thead > tr > th:last-child) {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
+ color: #ffffff !important;
+ font-weight: 600;
+ border-left: 2px solid #e8e8e8;
+}
+
+.user-list-page :global(.ant-table-tbody > tr > td:last-child) {
+ background: #f8f9ff !important;
+ border-left: 2px solid #e8e8e8;
+ box-shadow: -2px 0 4px rgba(0, 0, 0, 0.02);
+}
+
+.user-list-page :global(.ant-table-tbody > tr:hover > td:last-child) {
+ background: #eef0ff !important;
+}
+
+.user-list-page :global(.ant-table-tbody > tr.row-selected > td:last-child) {
+ background: #e1e6ff !important;
+}
+
+/* 详情抽屉 */
+.detail-drawer-content {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+/* 顶部信息区域 - 固定不滚动 */
+.detail-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 16px 24px;
+ background: #fafafa;
+ border-bottom: 1px solid #f0f0f0;
+ flex-shrink: 0;
+}
+
+.detail-header-left {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+.close-button {
+ font-size: 18px;
+ color: #666;
+}
+
+.close-button:hover {
+ color: #1677ff;
+}
+
+.header-info {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+
+.user-title {
+ margin: 0;
+ font-size: 18px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+.detail-header-right {
+ flex: 1;
+ display: flex;
+ justify-content: flex-end;
+}
+
+/* 可滚动内容区域 */
+.detail-scrollable-content {
+ flex: 1;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+/* 用户信息面板 */
+.detail-info-panel {
+ padding: 24px;
+ background: #ffffff;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.info-item {
+ display: flex;
+ gap: 8px;
+ font-size: 13px;
+}
+
+.info-label {
+ color: rgba(0, 0, 0, 0.65);
+ white-space: nowrap;
+}
+
+.info-value {
+ color: rgba(0, 0, 0, 0.88);
+ font-weight: 500;
+}
+
+/* 操作按钮区 */
+.detail-actions {
+ margin-top: 20px;
+ padding-top: 20px;
+ border-top: 1px solid #f0f0f0;
+}
+
+/* 标签页区域 */
+.detail-tabs {
+ background: #ffffff;
+ padding-top: 16px;
+ padding-left: 12px;
+ min-height: 400px;
+}
+
+.detail-tabs :global(.ant-tabs) {
+ height: 100%;
+}
+
+.detail-tabs :global(.ant-tabs-content-holder) {
+ overflow: visible;
+}
+
+.detail-tabs :global(.ant-tabs-nav) {
+ padding: 0;
+ margin: 0 24px;
+ margin-bottom: 0;
+ background: transparent;
+}
+
+.detail-tabs :global(.ant-tabs-nav::before) {
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.detail-tabs :global(.ant-tabs-tab) {
+ padding: 12px 0;
+ margin: 0 32px 0 0;
+ font-size: 14px;
+ font-weight: 500;
+}
+
+.detail-tabs :global(.ant-tabs-tab:first-child) {
+ margin-left: 0;
+}
+
+.detail-tabs :global(.ant-tabs-tab-active .ant-tabs-tab-btn) {
+ color: #d946ef;
+}
+
+.detail-tabs :global(.ant-tabs-ink-bar) {
+ background: #d946ef;
+ height: 3px;
+}
+
+.tab-content {
+ padding: 24px;
+ background: #ffffff;
+}
+
+/* 卡片列表 */
+.card-list {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+}
+
+/* 终端卡片 */
+.terminal-card {
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+ transition: all 0.3s;
+}
+
+.terminal-card:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+}
+
+/* 镜像卡片 */
+.image-card {
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+ transition: all 0.3s;
+}
+
+.image-card:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+}
+
+.card-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.card-header h4 {
+ margin: 0;
+ font-size: 15px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.88);
+ display: flex;
+ align-items: center;
+}
+
+.card-info-item {
+ display: flex;
+ font-size: 13px;
+ line-height: 1.6;
+}
+
+.card-label {
+ color: rgba(0, 0, 0, 0.65);
+ white-space: nowrap;
+}
+
+.card-value {
+ color: rgba(0, 0, 0, 0.88);
+ flex: 1;
+}
+
+/* 响应式 */
+@media (max-width: 1200px) {
+ .stats-panel :global(.ant-row) {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ }
+}
+
+@media (max-width: 768px) {
+ .action-bar {
+ flex-direction: column;
+ gap: 12px;
+ align-items: stretch;
+ }
+
+ .action-bar-left,
+ .action-bar-right {
+ flex-wrap: wrap;
+ }
+
+ .stats-panel :global(.ant-row) {
+ grid-template-columns: 1fr;
+ }
+}
diff --git a/src/pages/UserListPage.jsx b/src/pages/UserListPage.jsx
new file mode 100644
index 0000000..a951c60
--- /dev/null
+++ b/src/pages/UserListPage.jsx
@@ -0,0 +1,817 @@
+import { useState } from 'react'
+import {
+ Table,
+ Input,
+ Button,
+ Tag,
+ Badge,
+ Drawer,
+ Tree,
+ Dropdown,
+ Space,
+ Form,
+ Select,
+ Divider,
+ Card,
+ Row,
+ Col,
+ Statistic,
+ Popover,
+ Switch,
+ Tabs,
+} from 'antd'
+import {
+ UserOutlined,
+ SearchOutlined,
+ FilterOutlined,
+ PlusOutlined,
+ ReloadOutlined,
+ EditOutlined,
+ DeleteOutlined,
+ MoreOutlined,
+ CloseOutlined,
+ CheckCircleOutlined,
+ CloseCircleOutlined,
+ LockOutlined,
+ DesktopOutlined,
+ DatabaseOutlined,
+} from '@ant-design/icons'
+import PageTitleBar from '../components/PageTitleBar/PageTitleBar'
+import ConfirmDialog from '../components/ConfirmDialog/ConfirmDialog'
+import Toast from '../components/Toast/Toast'
+import userData from '../data/userData.json'
+import './UserListPage.css'
+
+const { Search } = Input
+
+function UserListPage() {
+ const [selectedRowKeys, setSelectedRowKeys] = useState([])
+ const [selectedUser, setSelectedUser] = useState(null)
+ const [showFilterPopover, setShowFilterPopover] = useState(false)
+ const [showDetailDrawer, setShowDetailDrawer] = useState(false)
+ const [showEditDrawer, setShowEditDrawer] = useState(false)
+ const [editMode, setEditMode] = useState('add')
+ const [searchKeyword, setSearchKeyword] = useState('')
+ const [selectedGroup, setSelectedGroup] = useState(null)
+ const [selectedGroupName, setSelectedGroupName] = useState('')
+ const [tempSelectedGroup, setTempSelectedGroup] = useState(null)
+ const [filteredUsers, setFilteredUsers] = useState(userData.users)
+ const [showStatsPanel, setShowStatsPanel] = useState(true)
+ const [statusFilter, setStatusFilter] = useState(null)
+
+ // 表格列定义
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ key: 'id',
+ width: 80,
+ align: 'center',
+ },
+ {
+ title: '用户类型',
+ dataIndex: 'userType',
+ key: 'userType',
+ width: 120,
+ },
+ {
+ title: '用户名',
+ dataIndex: 'userName',
+ key: 'userName',
+ width: 150,
+ render: (text) => (
+
+
+ {text}
+
+ ),
+ },
+ {
+ title: '姓名',
+ dataIndex: 'name',
+ key: 'name',
+ width: 120,
+ },
+ {
+ title: '用户分组',
+ dataIndex: 'group',
+ key: 'group',
+ width: 150,
+ render: (text) => {text},
+ },
+ {
+ title: '启停用',
+ dataIndex: 'status',
+ key: 'status',
+ width: 100,
+ align: 'center',
+ render: (status) => (
+
+ ),
+ },
+ {
+ title: '授权终端',
+ dataIndex: 'grantedTerminals',
+ key: 'grantedTerminals',
+ width: 100,
+ align: 'center',
+ },
+ {
+ title: '授权镜像',
+ dataIndex: 'grantedImages',
+ key: 'grantedImages',
+ width: 100,
+ align: 'center',
+ },
+ {
+ title: '操作',
+ key: 'action',
+ width: 200,
+ fixed: 'right',
+ render: (_, record) => (
+ e.stopPropagation()}>
+ } onClick={() => handleEditUser(record)}>
+ 编辑
+
+ }>
+ 重置密码
+
+ }
+ danger
+ onClick={() => handleDeleteUser(record)}
+ >
+ 删除
+
+
+ ),
+ },
+ ]
+
+ // 行选择配置
+ const rowSelection = {
+ selectedRowKeys,
+ onChange: (newSelectedRowKeys) => {
+ setSelectedRowKeys(newSelectedRowKeys)
+ },
+ }
+
+ // 处理搜索
+ const handleSearch = (value) => {
+ setSearchKeyword(value)
+ filterUsers(value, selectedGroup, statusFilter)
+ }
+
+ // 处理分组选择
+ const handleGroupSelect = (selectedKeys, info) => {
+ const groupId = selectedKeys[0]
+ setTempSelectedGroup(groupId)
+ }
+
+ // 确认筛选
+ const handleConfirmFilter = () => {
+ setSelectedGroup(tempSelectedGroup)
+ const findGroupName = (nodes, id) => {
+ for (const node of nodes) {
+ if (node.id === id) return node.name
+ if (node.children) {
+ const found = findGroupName(node.children, id)
+ if (found) return found
+ }
+ }
+ return null
+ }
+ const groupName = tempSelectedGroup
+ ? findGroupName(userData.userGroups, tempSelectedGroup)
+ : ''
+ setSelectedGroupName(groupName)
+ filterUsers(searchKeyword, tempSelectedGroup, statusFilter)
+ setShowFilterPopover(false)
+ }
+
+ // 清除筛选
+ const handleClearFilter = () => {
+ setTempSelectedGroup(null)
+ setSelectedGroup(null)
+ setSelectedGroupName('')
+ filterUsers(searchKeyword, null, statusFilter)
+ setShowFilterPopover(false)
+ }
+
+ // 过滤用户
+ const filterUsers = (keyword, groupId, status = statusFilter) => {
+ let filtered = userData.users
+
+ if (keyword) {
+ filtered = filtered.filter(
+ (user) =>
+ user.userName.toLowerCase().includes(keyword.toLowerCase()) ||
+ user.name.toLowerCase().includes(keyword.toLowerCase())
+ )
+ }
+
+ if (groupId) {
+ filtered = filtered.filter((user) => user.groupId === groupId)
+ }
+
+ if (status) {
+ filtered = filtered.filter((user) => user.status === status)
+ }
+
+ setFilteredUsers(filtered)
+ }
+
+ // 处理状态筛选
+ const handleStatusFilterClick = (status) => {
+ const newStatusFilter = statusFilter === status ? null : status
+ setStatusFilter(newStatusFilter)
+ filterUsers(searchKeyword, selectedGroup, newStatusFilter)
+ }
+
+ // 处理总数点击
+ const handleTotalClick = () => {
+ if (statusFilter !== null) {
+ setStatusFilter(null)
+ filterUsers(searchKeyword, selectedGroup, null)
+ }
+ }
+
+ // 删除用户
+ const handleDeleteUser = (record) => {
+ ConfirmDialog.delete({
+ itemName: `用户名:${record.userName}`,
+ itemInfo: `姓名:${record.name}`,
+ onOk() {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ const newUsers = filteredUsers.filter((u) => u.id !== record.id)
+ setFilteredUsers(newUsers)
+ resolve()
+ Toast.success('删除成功', `用户 "${record.userName}" 已成功删除`)
+ }, 1000)
+ })
+ },
+ })
+ }
+
+ // 批量删除
+ const handleBatchDelete = () => {
+ const selectedUsers = filteredUsers.filter((u) => selectedRowKeys.includes(u.id))
+ const items = selectedUsers.map((user) => ({
+ name: user.userName,
+ info: user.name,
+ }))
+
+ ConfirmDialog.batchDelete({
+ count: selectedRowKeys.length,
+ items,
+ onOk() {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ const count = selectedRowKeys.length
+ const newUsers = filteredUsers.filter((u) => !selectedRowKeys.includes(u.id))
+ setFilteredUsers(newUsers)
+ setSelectedRowKeys([])
+ resolve()
+ Toast.success('批量删除成功', `已成功删除 ${count} 个用户`)
+ }, 1000)
+ })
+ },
+ })
+ }
+
+ // 处理行点击
+ const handleRowClick = (record) => {
+ setSelectedUser(record)
+ setShowEditDrawer(false) // 关闭编辑抽屉
+ setShowDetailDrawer(true)
+ }
+
+ // 处理编辑用户
+ const handleEditUser = (record) => {
+ setSelectedUser(record)
+ setEditMode('edit')
+ setShowDetailDrawer(false) // 关闭详情抽屉
+ setShowEditDrawer(true)
+ }
+
+ // 转换树数据
+ const convertTreeData = (nodes) => {
+ return nodes.map((node) => ({
+ title: node.name,
+ key: node.id,
+ children: node.children ? convertTreeData(node.children) : undefined,
+ }))
+ }
+
+ const treeData = convertTreeData(userData.userGroups)
+
+ // 高级筛选面板内容
+ const filterContent = (
+
+
+ {tempSelectedGroup ? (
+
+ 已选择分组:
+ setTempSelectedGroup(null)}>
+ {(() => {
+ const findName = (nodes, id) => {
+ for (const node of nodes) {
+ if (node.id === id) return node.name
+ if (node.children) {
+ const found = findName(node.children, id)
+ if (found) return found
+ }
+ }
+ return ''
+ }
+ return findName(userData.userGroups, tempSelectedGroup)
+ })()}
+
+
+ ) : (
+
+ 请选择用户分组进行筛选
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+ )
+
+ return (
+
+ {/* 页面标题栏 */}
+
setShowStatsPanel(expanded)}
+ />
+
+ {/* 数据统计面板 */}
+ {showStatsPanel && (
+
+
+
+
+ }
+ valueStyle={{ color: '#1677ff' }}
+ />
+
+
+
+ handleStatusFilterClick('enabled')}
+ style={{ cursor: 'pointer' }}
+ >
+ u.status === 'enabled').length}
+ prefix={}
+ valueStyle={{ color: '#52c41a' }}
+ />
+
+
+
+ handleStatusFilterClick('disabled')}
+ style={{ cursor: 'pointer' }}
+ >
+ u.status === 'disabled').length}
+ prefix={}
+ valueStyle={{ color: '#8c8c8c' }}
+ />
+
+
+
+
+ }
+ valueStyle={{ color: '#faad14' }}
+ />
+
+
+
+
+ )}
+
+ {/* 操作栏 */}
+
+
+ }
+ onClick={() => {
+ setEditMode('add')
+ setSelectedUser(null)
+ setShowDetailDrawer(false) // 关闭详情抽屉
+ setShowEditDrawer(true)
+ }}
+ >
+ 新增用户
+
+ } disabled={selectedRowKeys.length === 0} danger onClick={handleBatchDelete}>
+ 批量删除
+
+
+
+
+ handleSearch(e.target.value)}
+ value={searchKeyword}
+ />
+
+
+ 高级筛选
+
+ }
+ trigger="click"
+ open={showFilterPopover}
+ onOpenChange={(visible) => {
+ setShowFilterPopover(visible)
+ if (visible) {
+ setTempSelectedGroup(selectedGroup)
+ }
+ }}
+ placement="bottomRight"
+ overlayClassName="filter-popover"
+ >
+
} type={selectedGroup ? 'primary' : 'default'}>
+ {selectedGroupName || '筛选'}
+
+
+
+
}>刷新
+
+
+
+ {/* 数据表格 */}
+
+
`共 ${total} 条`,
+ }}
+ scroll={{ x: 1400 }}
+ onRow={(record) => ({
+ onClick: () => handleRowClick(record),
+ className: selectedUser?.id === record.id ? 'row-selected' : '',
+ })}
+ />
+
+
+ {/* 详情抽屉 */}
+ setShowDetailDrawer(false)}
+ open={showDetailDrawer}
+ closable={false}
+ styles={{ body: { padding: 0 } }}
+ >
+ {selectedUser && (
+
+ {/* 顶部标题栏 - 固定不滚动 */}
+
+
+
}
+ onClick={() => setShowDetailDrawer(false)}
+ className="close-button"
+ />
+
+
{selectedUser.userName}
+
+ {selectedUser.status === 'enabled' ? '启用' : '停用'}
+
+
+
+
+
+ }
+ onClick={() => {
+ setEditMode('edit')
+ setShowEditDrawer(true)
+ setShowDetailDrawer(false)
+ }}
+ >
+ 编辑
+
+ }
+ danger
+ onClick={() => {
+ setShowDetailDrawer(false)
+ handleDeleteUser(selectedUser)
+ }}
+ >
+ 删除
+
+
+
+
+
+ {/* 可滚动内容区域 */}
+
+ {/* 用户信息面板 */}
+
+
+
+
+
用户名:
+
{selectedUser.userName}
+
+
+
+
+
用户分组:
+
{selectedUser.group}
+
+
+
+
+
姓名:
+
{selectedUser.name}
+
+
+
+
+
授权镜像:
+
{selectedUser.grantedImages}
+
+
+
+
+
用户类型:
+
{selectedUser.userType}
+
+
+
+
+
授权终端:
+
{selectedUser.grantedTerminals}
+
+
+
+
+
启停用:
+
+
+ {selectedUser.status === 'enabled' ? '启用' : '停用'}
+
+
+
+
+
+
+
+
+
+ {/* 操作按钮区 */}
+
+
+
+
+
+ }>停用
+
+
+
+
+ {/* 标签页区域 */}
+
+
+
+ 授权终端
+
+ ),
+ children: (
+
+
+ {selectedUser.terminals && selectedUser.terminals.length > 0 ? (
+ selectedUser.terminals.map((terminal, index) => (
+
+
+
+
+ {terminal.name}
+
+
+
+
+
+
+
+ 序号:
+ {index + 1}
+
+
+
+
+ 终端分组:
+ {terminal.group}
+
+
+
+
+ MAC地址:
+ {terminal.mac}
+
+
+
+
+ IP地址:
+ {terminal.ip}
+
+
+
+
+ 授权镜像:
+ {terminal.grantedImages}
+
+
+
+
+ 数据盘容量:
+ {terminal.dataDisk}
+
+
+
+
+ 系统盘容量:
+ {terminal.systemDisk}
+
+
+
+
+
+ }>
+ 编辑
+
+ }>
+ 移除授权
+
+
+
+ ))
+ ) : (
+
+ 该用户暂无授权终端
+
+ )}
+
+
+ ),
+ },
+ {
+ key: 'images',
+ label: (
+
+
+ 授权镜像
+
+ ),
+ children: (
+
+
+ {selectedUser.images && selectedUser.images.length > 0 ? (
+ selectedUser.images.map((image) => (
+
+
+
+
+ {image.name}
+
+
+ {image.status}
+
+
+
+
+
+
+ 系统镜像:
+ {image.system}
+
+
+
+
+ 操作系统:
+ {image.os}
+
+
+
+
+ 创建时间:
+ {image.createTime}
+
+
+
+
+ 下发方式:
+ {image.method}
+
+
+
+
+
+ }>
+ 编辑
+
+ }>
+ 移除授权
+
+
+
+ ))
+ ) : (
+
+ 该用户暂无授权镜像
+
+ )}
+
+
+ ),
+ },
+ ]}
+ />
+
+
+
+ )}
+
+
+ )
+}
+
+export default UserListPage
diff --git a/src/styles/globals.css b/src/styles/globals.css
new file mode 100644
index 0000000..0508072
--- /dev/null
+++ b/src/styles/globals.css
@@ -0,0 +1,78 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+/* 全局样式变量 */
+:root {
+ /* 主色调 */
+ --primary-color: #1677ff;
+
+ /* 文本颜色 */
+ --text-primary: rgba(0, 0, 0, 0.88);
+ --text-secondary: rgba(0, 0, 0, 0.65);
+ --text-tertiary: rgba(0, 0, 0, 0.45);
+ --text-disabled: rgba(0, 0, 0, 0.25);
+
+ /* 背景颜色 */
+ --bg-primary: #ffffff;
+ --bg-secondary: #fafafa;
+ --bg-tertiary: #f5f5f5;
+
+ /* 边框颜色 */
+ --border-primary: #d9d9d9;
+ --border-secondary: #f0f0f0;
+
+ /* 阴影 */
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);
+ --shadow-md: 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
+}
+
+/* 基础样式重置 */
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif;
+ font-size: 14px;
+ line-height: 1.5714;
+ color: var(--text-primary);
+ background-color: var(--bg-secondary);
+}
+
+/* 滚动条样式 */
+::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+}
+
+::-webkit-scrollbar-track {
+ background: #f1f1f1;
+ border-radius: 4px;
+}
+
+::-webkit-scrollbar-thumb {
+ background: #c1c1c1;
+ border-radius: 4px;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background: #a8a8a8;
+}
+
+/* 工具类扩展 */
+.content-container {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 0 24px;
+}
+
+.page-header {
+ margin-bottom: 24px;
+}
+
+.card-shadow {
+ box-shadow: var(--shadow-sm);
+}
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000..ac36ac0
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,65 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: [
+ "./index.html",
+ "./src/**/*.{js,ts,jsx,tsx}",
+ ],
+ theme: {
+ extend: {
+ colors: {
+ primary: {
+ 50: '#fce7f6',
+ 100: '#f5bae6',
+ 200: '#ee8dd6',
+ 300: '#e760c6',
+ 400: '#e033b6',
+ 500: '#b8178d', // 品牌主色 - 匹配 NEX LOGO
+ 600: '#9c1477',
+ 700: '#801161',
+ 800: '#640d4b',
+ 900: '#480a35',
+ },
+ // 保留原蓝色作为辅助色
+ blue: {
+ 50: '#e6f4ff',
+ 100: '#bae0ff',
+ 200: '#91caff',
+ 300: '#69b1ff',
+ 400: '#4096ff',
+ 500: '#1677ff',
+ 600: '#0958d9',
+ 700: '#003eb3',
+ 800: '#002c8c',
+ 900: '#001d66',
+ },
+ },
+ fontFamily: {
+ sans: [
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ 'Segoe UI',
+ 'Roboto',
+ 'Helvetica Neue',
+ 'Arial',
+ 'Noto Sans',
+ 'sans-serif',
+ ],
+ mono: [
+ 'SF Mono',
+ 'Monaco',
+ 'Inconsolata',
+ 'Fira Code',
+ 'Fira Mono',
+ 'Droid Sans Mono',
+ 'Source Code Pro',
+ 'monospace',
+ ],
+ },
+ },
+ },
+ plugins: [],
+ // 与 Ant Design 兼容
+ corePlugins: {
+ preflight: false,
+ },
+}
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..0ff16cb
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,21 @@
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'
+import path from 'path'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react()],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, './src'),
+ },
+ },
+ server: {
+ port: 5173,
+ open: true,
+ },
+ build: {
+ outDir: 'dist',
+ sourcemap: false,
+ },
+})
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..85f605e
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,3607 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@alloc/quick-lru@^5.2.0":
+ version "5.2.0"
+ resolved "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
+ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
+
+"@ant-design/colors@^7.0.0", "@ant-design/colors@^7.2.1":
+ version "7.2.1"
+ resolved "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.2.1.tgz#3bbc1c6c18550020d1622a0067ff03492318df98"
+ integrity sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==
+ dependencies:
+ "@ant-design/fast-color" "^2.0.6"
+
+"@ant-design/cssinjs-utils@^1.1.3":
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.3.tgz#5dd79126057920a6992d57b38dd84e2c0b707977"
+ integrity sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==
+ dependencies:
+ "@ant-design/cssinjs" "^1.21.0"
+ "@babel/runtime" "^7.23.2"
+ rc-util "^5.38.0"
+
+"@ant-design/cssinjs@^1.21.0", "@ant-design/cssinjs@^1.23.0":
+ version "1.24.0"
+ resolved "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.24.0.tgz#7db091f03f189abc77a13cbd27a2293802cd7285"
+ integrity sha512-K4cYrJBsgvL+IoozUXYjbT6LHHNt+19a9zkvpBPxLjFHas1UpPM2A5MlhROb0BT8N8WoavM5VsP9MeSeNK/3mg==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ "@emotion/hash" "^0.8.0"
+ "@emotion/unitless" "^0.7.5"
+ classnames "^2.3.1"
+ csstype "^3.1.3"
+ rc-util "^5.35.0"
+ stylis "^4.3.4"
+
+"@ant-design/fast-color@^2.0.6":
+ version "2.0.6"
+ resolved "https://registry.npmmirror.com/@ant-design/fast-color/-/fast-color-2.0.6.tgz#ab4d4455c1542c9017d367c2fa8ca3e4215d0ba2"
+ integrity sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==
+ dependencies:
+ "@babel/runtime" "^7.24.7"
+
+"@ant-design/icons-svg@^4.4.0":
+ version "4.4.2"
+ resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6"
+ integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==
+
+"@ant-design/icons@^5.2.6", "@ant-design/icons@^5.6.1":
+ version "5.6.1"
+ resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.6.1.tgz#7290fcdc3d96ff3fca793ed399053cd29ad5dbd3"
+ integrity sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==
+ dependencies:
+ "@ant-design/colors" "^7.0.0"
+ "@ant-design/icons-svg" "^4.4.0"
+ "@babel/runtime" "^7.24.8"
+ classnames "^2.2.6"
+ rc-util "^5.31.1"
+
+"@ant-design/react-slick@~1.1.2":
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.1.2.tgz#f84ce3e4d0dc941f02b16f1d1d6d7a371ffbb4f1"
+ integrity sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==
+ dependencies:
+ "@babel/runtime" "^7.10.4"
+ classnames "^2.2.5"
+ json2mq "^0.2.0"
+ resize-observer-polyfill "^1.5.1"
+ throttle-debounce "^5.0.0"
+
+"@babel/code-frame@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
+ integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.27.1"
+ js-tokens "^4.0.0"
+ picocolors "^1.1.1"
+
+"@babel/compat-data@^7.27.2":
+ version "7.28.5"
+ resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f"
+ integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==
+
+"@babel/core@^7.28.0":
+ version "7.28.5"
+ resolved "https://registry.npmmirror.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e"
+ integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.28.5"
+ "@babel/helper-compilation-targets" "^7.27.2"
+ "@babel/helper-module-transforms" "^7.28.3"
+ "@babel/helpers" "^7.28.4"
+ "@babel/parser" "^7.28.5"
+ "@babel/template" "^7.27.2"
+ "@babel/traverse" "^7.28.5"
+ "@babel/types" "^7.28.5"
+ "@jridgewell/remapping" "^2.3.5"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
+"@babel/generator@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298"
+ integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==
+ dependencies:
+ "@babel/parser" "^7.28.5"
+ "@babel/types" "^7.28.5"
+ "@jridgewell/gen-mapping" "^0.3.12"
+ "@jridgewell/trace-mapping" "^0.3.28"
+ jsesc "^3.0.2"
+
+"@babel/helper-compilation-targets@^7.27.2":
+ version "7.27.2"
+ resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d"
+ integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
+ dependencies:
+ "@babel/compat-data" "^7.27.2"
+ "@babel/helper-validator-option" "^7.27.1"
+ browserslist "^4.24.0"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
+"@babel/helper-globals@^7.28.0":
+ version "7.28.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674"
+ integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==
+
+"@babel/helper-module-imports@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"
+ integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
+ dependencies:
+ "@babel/traverse" "^7.27.1"
+ "@babel/types" "^7.27.1"
+
+"@babel/helper-module-transforms@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6"
+ integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
+ "@babel/traverse" "^7.28.3"
+
+"@babel/helper-plugin-utils@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c"
+ integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
+
+"@babel/helper-string-parser@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
+ integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
+
+"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4"
+ integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==
+
+"@babel/helper-validator-option@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
+ integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
+
+"@babel/helpers@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827"
+ integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==
+ dependencies:
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.4"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08"
+ integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==
+ dependencies:
+ "@babel/types" "^7.28.5"
+
+"@babel/plugin-transform-react-jsx-self@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz#af678d8506acf52c577cac73ff7fe6615c85fc92"
+ integrity sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-react-jsx-source@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz#dcfe2c24094bb757bf73960374e7c55e434f19f0"
+ integrity sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.7", "@babel/runtime@^7.24.8", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0":
+ version "7.28.4"
+ resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326"
+ integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==
+
+"@babel/template@^7.27.2":
+ version "7.27.2"
+ resolved "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d"
+ integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/parser" "^7.27.2"
+ "@babel/types" "^7.27.1"
+
+"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b"
+ integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.28.5"
+ "@babel/helper-globals" "^7.28.0"
+ "@babel/parser" "^7.28.5"
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.5"
+ debug "^4.3.1"
+
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.npmmirror.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b"
+ integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==
+ dependencies:
+ "@babel/helper-string-parser" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.28.5"
+
+"@emotion/hash@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+ integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
+"@emotion/unitless@^0.7.5":
+ version "0.7.5"
+ resolved "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+ integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
+"@esbuild/aix-ppc64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
+ integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
+
+"@esbuild/android-arm64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
+ integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
+
+"@esbuild/android-arm@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
+ integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
+
+"@esbuild/android-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
+ integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
+
+"@esbuild/darwin-arm64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
+ integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
+
+"@esbuild/darwin-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
+ integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
+
+"@esbuild/freebsd-arm64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
+ integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
+
+"@esbuild/freebsd-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
+ integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
+
+"@esbuild/linux-arm64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
+ integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
+
+"@esbuild/linux-arm@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
+ integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
+
+"@esbuild/linux-ia32@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
+ integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
+
+"@esbuild/linux-loong64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
+ integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
+
+"@esbuild/linux-mips64el@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
+ integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
+
+"@esbuild/linux-ppc64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
+ integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
+
+"@esbuild/linux-riscv64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
+ integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
+
+"@esbuild/linux-s390x@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
+ integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
+
+"@esbuild/linux-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
+ integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
+
+"@esbuild/netbsd-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
+ integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
+
+"@esbuild/openbsd-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
+ integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
+
+"@esbuild/sunos-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
+ integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
+
+"@esbuild/win32-arm64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
+ integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
+
+"@esbuild/win32-ia32@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
+ integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
+
+"@esbuild/win32-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
+ integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
+
+"@eslint-community/eslint-utils@^4.2.0":
+ version "4.9.0"
+ resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3"
+ integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==
+ dependencies:
+ eslint-visitor-keys "^3.4.3"
+
+"@eslint-community/regexpp@^4.6.1":
+ version "4.12.2"
+ resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b"
+ integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==
+
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@8.57.1":
+ version "8.57.1"
+ resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2"
+ integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
+
+"@humanwhocodes/config-array@^0.13.0":
+ version "0.13.0"
+ resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748"
+ integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.3"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
+ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
+
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.13"
+ resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
+ integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.5.0"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/remapping@^2.3.5":
+ version "2.3.5"
+ resolved "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
+ integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
+ version "1.5.5"
+ resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
+ integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
+
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28":
+ version "0.3.31"
+ resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0"
+ integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@rc-component/async-validator@^5.0.3":
+ version "5.0.4"
+ resolved "https://registry.npmmirror.com/@rc-component/async-validator/-/async-validator-5.0.4.tgz#5291ad92f00a14b6766fc81735c234277f83e948"
+ integrity sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==
+ dependencies:
+ "@babel/runtime" "^7.24.4"
+
+"@rc-component/color-picker@~2.0.1":
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-2.0.1.tgz#6b9b96152466a9d4475cbe72b40b594bfda164be"
+ integrity sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==
+ dependencies:
+ "@ant-design/fast-color" "^2.0.6"
+ "@babel/runtime" "^7.23.6"
+ classnames "^2.2.6"
+ rc-util "^5.38.1"
+
+"@rc-component/context@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/@rc-component/context/-/context-1.4.0.tgz#dc6fb021d6773546af8f016ae4ce9aea088395e8"
+ integrity sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ rc-util "^5.27.0"
+
+"@rc-component/mini-decimal@^1.0.1":
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz#7b7a362b14a0a54cb5bc6fd2b82731f29f11d9b0"
+ integrity sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+
+"@rc-component/mutate-observer@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz#ee53cc88b78aade3cd0653609215a44779386fd8"
+ integrity sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+ classnames "^2.3.2"
+ rc-util "^5.24.4"
+
+"@rc-component/portal@^1.0.0-8", "@rc-component/portal@^1.0.0-9", "@rc-component/portal@^1.0.2", "@rc-component/portal@^1.1.0", "@rc-component/portal@^1.1.1":
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/@rc-component/portal/-/portal-1.1.2.tgz#55db1e51d784e034442e9700536faaa6ab63fc71"
+ integrity sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+ classnames "^2.3.2"
+ rc-util "^5.24.4"
+
+"@rc-component/qrcode@~1.1.0":
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/@rc-component/qrcode/-/qrcode-1.1.0.tgz#4e38f1d7c2c8aae7f62d60ab110a842c1395db3e"
+ integrity sha512-ABA80Yer0c6I2+moqNY0kF3Y1NxIT6wDP/EINIqbiRbfZKP1HtHpKMh8WuTXLgVGYsoWG2g9/n0PgM8KdnJb4Q==
+ dependencies:
+ "@babel/runtime" "^7.24.7"
+ classnames "^2.3.2"
+
+"@rc-component/tour@~1.15.1":
+ version "1.15.1"
+ resolved "https://registry.npmmirror.com/@rc-component/tour/-/tour-1.15.1.tgz#9b79808254185fc19e964172d99e25e8c6800ded"
+ integrity sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+ "@rc-component/portal" "^1.0.0-9"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.3.2"
+ rc-util "^5.24.4"
+
+"@rc-component/trigger@^2.0.0", "@rc-component/trigger@^2.1.1", "@rc-component/trigger@^2.3.0":
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.3.0.tgz#9499ada078daca9dd99d01f0f0743ee1ab9e398b"
+ integrity sha512-iwaxZyzOuK0D7lS+0AQEtW52zUWxoGqTGkke3dRyb8pYiShmRpCjB/8TzPI4R6YySCH7Vm9BZj/31VPiiQTLBg==
+ dependencies:
+ "@babel/runtime" "^7.23.2"
+ "@rc-component/portal" "^1.1.0"
+ classnames "^2.3.2"
+ rc-motion "^2.0.0"
+ rc-resize-observer "^1.3.1"
+ rc-util "^5.44.0"
+
+"@remix-run/router@1.23.0":
+ version "1.23.0"
+ resolved "https://registry.npmmirror.com/@remix-run/router/-/router-1.23.0.tgz#35390d0e7779626c026b11376da6789eb8389242"
+ integrity sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==
+
+"@rolldown/pluginutils@1.0.0-beta.27":
+ version "1.0.0-beta.27"
+ resolved "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz#47d2bf4cef6d470b22f5831b420f8964e0bf755f"
+ integrity sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==
+
+"@rollup/rollup-android-arm-eabi@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz#0f44a2f8668ed87b040b6fe659358ac9239da4db"
+ integrity sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==
+
+"@rollup/rollup-android-arm64@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz#25b9a01deef6518a948431564c987bcb205274f5"
+ integrity sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==
+
+"@rollup/rollup-darwin-arm64@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz#8a102869c88f3780c7d5e6776afd3f19084ecd7f"
+ integrity sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==
+
+"@rollup/rollup-darwin-x64@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz#8e526417cd6f54daf1d0c04cf361160216581956"
+ integrity sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==
+
+"@rollup/rollup-freebsd-arm64@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz#0e7027054493f3409b1f219a3eac5efd128ef899"
+ integrity sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==
+
+"@rollup/rollup-freebsd-x64@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz#72b204a920139e9ec3d331bd9cfd9a0c248ccb10"
+ integrity sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz#ab1b522ebe5b7e06c99504cc38f6cd8b808ba41c"
+ integrity sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==
+
+"@rollup/rollup-linux-arm-musleabihf@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz#f8cc30b638f1ee7e3d18eac24af47ea29d9beb00"
+ integrity sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==
+
+"@rollup/rollup-linux-arm64-gnu@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz#7af37a9e85f25db59dc8214172907b7e146c12cc"
+ integrity sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==
+
+"@rollup/rollup-linux-arm64-musl@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz#a623eb0d3617c03b7a73716eb85c6e37b776f7e0"
+ integrity sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==
+
+"@rollup/rollup-linux-loong64-gnu@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz#76ea038b549c5c6c5f0d062942627c4066642ee2"
+ integrity sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==
+
+"@rollup/rollup-linux-ppc64-gnu@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz#d9a4c3f0a3492bc78f6fdfe8131ac61c7359ccd5"
+ integrity sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==
+
+"@rollup/rollup-linux-riscv64-gnu@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz#87ab033eebd1a9a1dd7b60509f6333ec1f82d994"
+ integrity sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==
+
+"@rollup/rollup-linux-riscv64-musl@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz#bda3eb67e1c993c1ba12bc9c2f694e7703958d9f"
+ integrity sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==
+
+"@rollup/rollup-linux-s390x-gnu@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz#f7bc10fbe096ab44694233dc42a2291ed5453d4b"
+ integrity sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==
+
+"@rollup/rollup-linux-x64-gnu@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz#a151cb1234cc9b2cf5e8cfc02aa91436b8f9e278"
+ integrity sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==
+
+"@rollup/rollup-linux-x64-musl@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz#7859e196501cc3b3062d45d2776cfb4d2f3a9350"
+ integrity sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==
+
+"@rollup/rollup-openharmony-arm64@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz#85d0df7233734df31e547c1e647d2a5300b3bf30"
+ integrity sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==
+
+"@rollup/rollup-win32-arm64-msvc@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz#e62357d00458db17277b88adbf690bb855cac937"
+ integrity sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==
+
+"@rollup/rollup-win32-ia32-msvc@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz#fc7cd40f44834a703c1f1c3fe8bcc27ce476cd50"
+ integrity sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==
+
+"@rollup/rollup-win32-x64-gnu@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz#1a22acfc93c64a64a48c42672e857ee51774d0d3"
+ integrity sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==
+
+"@rollup/rollup-win32-x64-msvc@4.52.5":
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz#1657f56326bbe0ac80eedc9f9c18fc1ddd24e107"
+ integrity sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==
+
+"@types/babel__core@^7.20.5":
+ version "7.20.5"
+ resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
+ integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
+ dependencies:
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.27.0"
+ resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9"
+ integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.4"
+ resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
+ integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*":
+ version "7.28.0"
+ resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74"
+ integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==
+ dependencies:
+ "@babel/types" "^7.28.2"
+
+"@types/estree@1.0.8":
+ version "1.0.8"
+ resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
+ integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
+
+"@types/prop-types@*":
+ version "15.7.15"
+ resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7"
+ integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==
+
+"@types/react-dom@^18.2.17":
+ version "18.3.7"
+ resolved "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f"
+ integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==
+
+"@types/react@^18.2.43":
+ version "18.3.26"
+ resolved "https://registry.npmmirror.com/@types/react/-/react-18.3.26.tgz#4c5970878d30db3d2a0bca1e4eb5f258e391bbeb"
+ integrity sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^3.0.2"
+
+"@ungap/structured-clone@^1.2.0":
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
+ integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
+
+"@vitejs/plugin-react@^4.2.1":
+ version "4.7.0"
+ resolved "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz#647af4e7bb75ad3add578e762ad984b90f4a24b9"
+ integrity sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==
+ dependencies:
+ "@babel/core" "^7.28.0"
+ "@babel/plugin-transform-react-jsx-self" "^7.27.1"
+ "@babel/plugin-transform-react-jsx-source" "^7.27.1"
+ "@rolldown/pluginutils" "1.0.0-beta.27"
+ "@types/babel__core" "^7.20.5"
+ react-refresh "^0.17.0"
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn@^8.9.0:
+ version "8.15.0"
+ resolved "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
+ integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+ version "6.2.2"
+ resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1"
+ integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^6.1.0:
+ version "6.2.3"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041"
+ integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==
+
+antd@^5.12.0:
+ version "5.28.0"
+ resolved "https://registry.npmmirror.com/antd/-/antd-5.28.0.tgz#fb5dfc0a2ba5a90ee053c813d71f16e6b66ac994"
+ integrity sha512-AmCvyhWGHzlDQ6sfnGBBrFm/8sLPbBI8d/NDBsecliKqrTZUMr07TAQldo43iowwKzvgKxxuRoUHaBaYcBMdQA==
+ dependencies:
+ "@ant-design/colors" "^7.2.1"
+ "@ant-design/cssinjs" "^1.23.0"
+ "@ant-design/cssinjs-utils" "^1.1.3"
+ "@ant-design/fast-color" "^2.0.6"
+ "@ant-design/icons" "^5.6.1"
+ "@ant-design/react-slick" "~1.1.2"
+ "@babel/runtime" "^7.26.0"
+ "@rc-component/color-picker" "~2.0.1"
+ "@rc-component/mutate-observer" "^1.1.0"
+ "@rc-component/qrcode" "~1.1.0"
+ "@rc-component/tour" "~1.15.1"
+ "@rc-component/trigger" "^2.3.0"
+ classnames "^2.5.1"
+ copy-to-clipboard "^3.3.3"
+ dayjs "^1.11.11"
+ rc-cascader "~3.34.0"
+ rc-checkbox "~3.5.0"
+ rc-collapse "~3.9.0"
+ rc-dialog "~9.6.0"
+ rc-drawer "~7.3.0"
+ rc-dropdown "~4.2.1"
+ rc-field-form "~2.7.1"
+ rc-image "~7.12.0"
+ rc-input "~1.8.0"
+ rc-input-number "~9.5.0"
+ rc-mentions "~2.20.0"
+ rc-menu "~9.16.1"
+ rc-motion "^2.9.5"
+ rc-notification "~5.6.4"
+ rc-pagination "~5.1.0"
+ rc-picker "~4.11.3"
+ rc-progress "~4.0.0"
+ rc-rate "~2.13.1"
+ rc-resize-observer "^1.4.3"
+ rc-segmented "~2.7.0"
+ rc-select "~14.16.8"
+ rc-slider "~11.1.9"
+ rc-steps "~6.0.1"
+ rc-switch "~4.1.0"
+ rc-table "~7.54.0"
+ rc-tabs "~15.7.0"
+ rc-textarea "~1.10.2"
+ rc-tooltip "~6.4.0"
+ rc-tree "~5.13.1"
+ rc-tree-select "~5.27.0"
+ rc-upload "~4.11.0"
+ rc-util "^5.44.4"
+ scroll-into-view-if-needed "^3.1.0"
+ throttle-debounce "^5.0.2"
+
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+arg@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
+ integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b"
+ integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==
+ dependencies:
+ call-bound "^1.0.3"
+ is-array-buffer "^3.0.5"
+
+array-includes@^3.1.6, array-includes@^3.1.8:
+ version "3.1.9"
+ resolved "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a"
+ integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.4"
+ define-properties "^1.2.1"
+ es-abstract "^1.24.0"
+ es-object-atoms "^1.1.1"
+ get-intrinsic "^1.3.0"
+ is-string "^1.1.1"
+ math-intrinsics "^1.1.0"
+
+array.prototype.findlast@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.npmmirror.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904"
+ integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.flat@^1.3.1:
+ version "1.3.3"
+ resolved "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5"
+ integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.flatmap@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b"
+ integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.tosorted@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc"
+ integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.3"
+ es-errors "^1.3.0"
+ es-shim-unscopables "^1.0.2"
+
+arraybuffer.prototype.slice@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c"
+ integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==
+ dependencies:
+ array-buffer-byte-length "^1.0.1"
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+ is-array-buffer "^3.0.4"
+
+async-function@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b"
+ integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==
+
+autoprefixer@^10.4.16:
+ version "10.4.21"
+ resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d"
+ integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==
+ dependencies:
+ browserslist "^4.24.4"
+ caniuse-lite "^1.0.30001702"
+ fraction.js "^4.3.7"
+ normalize-range "^0.1.2"
+ picocolors "^1.1.1"
+ postcss-value-parser "^4.2.0"
+
+available-typed-arrays@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
+ integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==
+ dependencies:
+ possible-typed-array-names "^1.0.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+baseline-browser-mapping@^2.8.19:
+ version "2.8.23"
+ resolved "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.23.tgz#cd43e17eff5cbfb67c92153e7fe856cf6d426421"
+ integrity sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ==
+
+binary-extensions@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
+ integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+
+brace-expansion@^1.1.7:
+ version "1.1.12"
+ resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
+ integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7"
+ integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.3, braces@~3.0.2:
+ version "3.0.3"
+ resolved "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+ dependencies:
+ fill-range "^7.1.1"
+
+browserslist@^4.24.0, browserslist@^4.24.4:
+ version "4.27.0"
+ resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.27.0.tgz#755654744feae978fbb123718b2f139bc0fa6697"
+ integrity sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==
+ dependencies:
+ baseline-browser-mapping "^2.8.19"
+ caniuse-lite "^1.0.30001751"
+ electron-to-chromium "^1.5.238"
+ node-releases "^2.0.26"
+ update-browserslist-db "^1.1.4"
+
+call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
+ integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
+ dependencies:
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+
+call-bind@^1.0.7, call-bind@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c"
+ integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==
+ dependencies:
+ call-bind-apply-helpers "^1.0.0"
+ es-define-property "^1.0.0"
+ get-intrinsic "^1.2.4"
+ set-function-length "^1.2.2"
+
+call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
+ integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
+ dependencies:
+ call-bind-apply-helpers "^1.0.2"
+ get-intrinsic "^1.3.0"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-css@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+ integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001751:
+ version "1.0.30001753"
+ resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz#419f8fc9bab6f1a1d10d9574d0b3374f823c5b00"
+ integrity sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw==
+
+chalk@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chokidar@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@^2.5.1:
+ version "2.5.1"
+ resolved "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
+ integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+commander@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+compute-scroll-into-view@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz#02c3386ec531fb6a9881967388e53e8564f3e9aa"
+ integrity sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+copy-to-clipboard@^3.3.3:
+ version "3.3.3"
+ resolved "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0"
+ integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==
+ dependencies:
+ toggle-selection "^1.0.6"
+
+cross-spawn@^7.0.2, cross-spawn@^7.0.6:
+ version "7.0.6"
+ resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+csstype@^3.0.2, csstype@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+data-view-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570"
+ integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.2"
+
+data-view-byte-length@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735"
+ integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.2"
+
+data-view-byte-offset@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191"
+ integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.1"
+
+dayjs@^1.11.11:
+ version "1.11.19"
+ resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.19.tgz#15dc98e854bb43917f12021806af897c58ae2938"
+ integrity sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==
+
+debug@^4.1.0, debug@^4.3.1, debug@^4.3.2:
+ version "4.4.3"
+ resolved "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+ dependencies:
+ ms "^2.1.3"
+
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+define-data-property@^1.0.1, define-data-property@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
+ integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
+ dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ gopd "^1.0.1"
+
+define-properties@^1.1.3, define-properties@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
+ integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
+ dependencies:
+ define-data-property "^1.0.1"
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
+didyoumean@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
+ integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+
+dlv@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+ integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dunder-proto@^1.0.0, dunder-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
+ integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
+ dependencies:
+ call-bind-apply-helpers "^1.0.1"
+ es-errors "^1.3.0"
+ gopd "^1.2.0"
+
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+electron-to-chromium@^1.5.238:
+ version "1.5.244"
+ resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz#b9b61e3d24ef4203489951468614f2a360763820"
+ integrity sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0:
+ version "1.24.0"
+ resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328"
+ integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==
+ dependencies:
+ array-buffer-byte-length "^1.0.2"
+ arraybuffer.prototype.slice "^1.0.4"
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.8"
+ call-bound "^1.0.4"
+ data-view-buffer "^1.0.2"
+ data-view-byte-length "^1.0.2"
+ data-view-byte-offset "^1.0.1"
+ es-define-property "^1.0.1"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.1.1"
+ es-set-tostringtag "^2.1.0"
+ es-to-primitive "^1.3.0"
+ function.prototype.name "^1.1.8"
+ get-intrinsic "^1.3.0"
+ get-proto "^1.0.1"
+ get-symbol-description "^1.1.0"
+ globalthis "^1.0.4"
+ gopd "^1.2.0"
+ has-property-descriptors "^1.0.2"
+ has-proto "^1.2.0"
+ has-symbols "^1.1.0"
+ hasown "^2.0.2"
+ internal-slot "^1.1.0"
+ is-array-buffer "^3.0.5"
+ is-callable "^1.2.7"
+ is-data-view "^1.0.2"
+ is-negative-zero "^2.0.3"
+ is-regex "^1.2.1"
+ is-set "^2.0.3"
+ is-shared-array-buffer "^1.0.4"
+ is-string "^1.1.1"
+ is-typed-array "^1.1.15"
+ is-weakref "^1.1.1"
+ math-intrinsics "^1.1.0"
+ object-inspect "^1.13.4"
+ object-keys "^1.1.1"
+ object.assign "^4.1.7"
+ own-keys "^1.0.1"
+ regexp.prototype.flags "^1.5.4"
+ safe-array-concat "^1.1.3"
+ safe-push-apply "^1.0.0"
+ safe-regex-test "^1.1.0"
+ set-proto "^1.0.0"
+ stop-iteration-iterator "^1.1.0"
+ string.prototype.trim "^1.2.10"
+ string.prototype.trimend "^1.0.9"
+ string.prototype.trimstart "^1.0.8"
+ typed-array-buffer "^1.0.3"
+ typed-array-byte-length "^1.0.3"
+ typed-array-byte-offset "^1.0.4"
+ typed-array-length "^1.0.7"
+ unbox-primitive "^1.1.0"
+ which-typed-array "^1.1.19"
+
+es-define-property@^1.0.0, es-define-property@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
+ integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
+
+es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-iterator-helpers@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75"
+ integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.6"
+ es-errors "^1.3.0"
+ es-set-tostringtag "^2.0.3"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.6"
+ globalthis "^1.0.4"
+ gopd "^1.2.0"
+ has-property-descriptors "^1.0.2"
+ has-proto "^1.2.0"
+ has-symbols "^1.1.0"
+ internal-slot "^1.1.0"
+ iterator.prototype "^1.1.4"
+ safe-array-concat "^1.1.3"
+
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
+ integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
+ dependencies:
+ es-errors "^1.3.0"
+
+es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
+ integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
+ dependencies:
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
+es-shim-unscopables@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5"
+ integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==
+ dependencies:
+ hasown "^2.0.2"
+
+es-to-primitive@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18"
+ integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==
+ dependencies:
+ is-callable "^1.2.7"
+ is-date-object "^1.0.5"
+ is-symbol "^1.0.4"
+
+esbuild@^0.21.3:
+ version "0.21.5"
+ resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d"
+ integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.21.5"
+ "@esbuild/android-arm" "0.21.5"
+ "@esbuild/android-arm64" "0.21.5"
+ "@esbuild/android-x64" "0.21.5"
+ "@esbuild/darwin-arm64" "0.21.5"
+ "@esbuild/darwin-x64" "0.21.5"
+ "@esbuild/freebsd-arm64" "0.21.5"
+ "@esbuild/freebsd-x64" "0.21.5"
+ "@esbuild/linux-arm" "0.21.5"
+ "@esbuild/linux-arm64" "0.21.5"
+ "@esbuild/linux-ia32" "0.21.5"
+ "@esbuild/linux-loong64" "0.21.5"
+ "@esbuild/linux-mips64el" "0.21.5"
+ "@esbuild/linux-ppc64" "0.21.5"
+ "@esbuild/linux-riscv64" "0.21.5"
+ "@esbuild/linux-s390x" "0.21.5"
+ "@esbuild/linux-x64" "0.21.5"
+ "@esbuild/netbsd-x64" "0.21.5"
+ "@esbuild/openbsd-x64" "0.21.5"
+ "@esbuild/sunos-x64" "0.21.5"
+ "@esbuild/win32-arm64" "0.21.5"
+ "@esbuild/win32-ia32" "0.21.5"
+ "@esbuild/win32-x64" "0.21.5"
+
+escalade@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
+ integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-plugin-react-hooks@^4.6.0:
+ version "4.6.2"
+ resolved "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596"
+ integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==
+
+eslint-plugin-react-refresh@^0.4.5:
+ version "0.4.24"
+ resolved "https://registry.npmmirror.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.24.tgz#6914e8757eb7d7ccc3efb9dbcc8a51feda71d89e"
+ integrity sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==
+
+eslint-plugin-react@^7.33.2:
+ version "7.37.5"
+ resolved "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065"
+ integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==
+ dependencies:
+ array-includes "^3.1.8"
+ array.prototype.findlast "^1.2.5"
+ array.prototype.flatmap "^1.3.3"
+ array.prototype.tosorted "^1.1.4"
+ doctrine "^2.1.0"
+ es-iterator-helpers "^1.2.1"
+ estraverse "^5.3.0"
+ hasown "^2.0.2"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
+ minimatch "^3.1.2"
+ object.entries "^1.1.9"
+ object.fromentries "^2.0.8"
+ object.values "^1.2.1"
+ prop-types "^15.8.1"
+ resolve "^2.0.0-next.5"
+ semver "^6.3.1"
+ string.prototype.matchall "^4.0.12"
+ string.prototype.repeat "^1.0.0"
+
+eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
+eslint@^8.55.0:
+ version "8.57.1"
+ resolved "https://registry.npmmirror.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9"
+ integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.57.1"
+ "@humanwhocodes/config-array" "^0.13.0"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+ dependencies:
+ acorn "^8.9.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
+
+esquery@^1.4.2:
+ version "1.6.0"
+ resolved "https://registry.npmmirror.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
+ integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.3.2:
+ version "3.3.3"
+ resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
+ integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.8"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.19.1"
+ resolved "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5"
+ integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
+ dependencies:
+ reusify "^1.0.4"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.3"
+ rimraf "^3.0.2"
+
+flatted@^3.2.9:
+ version "3.3.3"
+ resolved "https://registry.npmmirror.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358"
+ integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
+
+for-each@^0.3.3, for-each@^0.3.5:
+ version "0.3.5"
+ resolved "https://registry.npmmirror.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47"
+ integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==
+ dependencies:
+ is-callable "^1.2.7"
+
+foreground-child@^3.1.0:
+ version "3.3.1"
+ resolved "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f"
+ integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==
+ dependencies:
+ cross-spawn "^7.0.6"
+ signal-exit "^4.0.1"
+
+fraction.js@^4.3.7:
+ version "4.3.7"
+ resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+ integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2, fsevents@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+function.prototype.name@^1.1.6, function.prototype.name@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78"
+ integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ define-properties "^1.2.1"
+ functions-have-names "^1.2.3"
+ hasown "^2.0.2"
+ is-callable "^1.2.7"
+
+functions-have-names@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+ integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+generator-function@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2"
+ integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
+ integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
+ 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.0, get-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
+ integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+ dependencies:
+ dunder-proto "^1.0.1"
+ es-object-atoms "^1.0.0"
+
+get-symbol-description@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee"
+ integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@^10.3.10:
+ version "10.4.5"
+ resolved "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
+ integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^3.1.2"
+ minimatch "^9.0.4"
+ minipass "^7.1.2"
+ package-json-from-dist "^1.0.0"
+ path-scurry "^1.11.1"
+
+glob@^7.1.3:
+ version "7.2.3"
+ resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^13.19.0:
+ version "13.24.0"
+ resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
+ dependencies:
+ type-fest "^0.20.2"
+
+globalthis@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
+ integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
+ dependencies:
+ define-properties "^1.2.1"
+ gopd "^1.0.1"
+
+gopd@^1.0.1, gopd@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
+ integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+has-bigints@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe"
+ integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
+ integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
+ dependencies:
+ es-define-property "^1.0.0"
+
+has-proto@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5"
+ integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==
+ dependencies:
+ dunder-proto "^1.0.0"
+
+has-symbols@^1.0.3, has-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
+ integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
+
+has-tostringtag@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
+ integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
+ dependencies:
+ has-symbols "^1.0.3"
+
+hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
+ignore@^5.2.0:
+ version "5.3.2"
+ resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
+ integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
+
+import-fresh@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
+ integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+internal-slot@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961"
+ integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==
+ dependencies:
+ es-errors "^1.3.0"
+ hasown "^2.0.2"
+ side-channel "^1.1.0"
+
+is-array-buffer@^3.0.4, is-array-buffer@^3.0.5:
+ version "3.0.5"
+ resolved "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280"
+ integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ get-intrinsic "^1.2.6"
+
+is-async-function@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523"
+ integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==
+ dependencies:
+ async-function "^1.0.0"
+ call-bound "^1.0.3"
+ get-proto "^1.0.1"
+ has-tostringtag "^1.0.2"
+ safe-regex-test "^1.1.0"
+
+is-bigint@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672"
+ integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==
+ dependencies:
+ has-bigints "^1.0.2"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-boolean-object@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e"
+ integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==
+ dependencies:
+ call-bound "^1.0.3"
+ has-tostringtag "^1.0.2"
+
+is-callable@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+ integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
+is-core-module@^2.13.0, is-core-module@^2.16.1:
+ version "2.16.1"
+ resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
+ integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
+ dependencies:
+ hasown "^2.0.2"
+
+is-data-view@^1.0.1, is-data-view@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e"
+ integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==
+ dependencies:
+ call-bound "^1.0.2"
+ get-intrinsic "^1.2.6"
+ is-typed-array "^1.1.13"
+
+is-date-object@^1.0.5, is-date-object@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7"
+ integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==
+ dependencies:
+ call-bound "^1.0.2"
+ has-tostringtag "^1.0.2"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-finalizationregistry@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90"
+ integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==
+ dependencies:
+ call-bound "^1.0.3"
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-function@^1.0.10:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5"
+ integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==
+ dependencies:
+ call-bound "^1.0.4"
+ generator-function "^2.0.0"
+ get-proto "^1.0.1"
+ has-tostringtag "^1.0.2"
+ safe-regex-test "^1.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-map@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e"
+ integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==
+
+is-negative-zero@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
+ integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
+
+is-number-object@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541"
+ integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==
+ dependencies:
+ call-bound "^1.0.3"
+ has-tostringtag "^1.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-regex@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22"
+ integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==
+ dependencies:
+ call-bound "^1.0.2"
+ gopd "^1.2.0"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
+is-set@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d"
+ integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==
+
+is-shared-array-buffer@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f"
+ integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==
+ dependencies:
+ call-bound "^1.0.3"
+
+is-string@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9"
+ integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==
+ dependencies:
+ call-bound "^1.0.3"
+ has-tostringtag "^1.0.2"
+
+is-symbol@^1.0.4, is-symbol@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634"
+ integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==
+ dependencies:
+ call-bound "^1.0.2"
+ has-symbols "^1.1.0"
+ safe-regex-test "^1.1.0"
+
+is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15:
+ version "1.1.15"
+ resolved "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b"
+ integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==
+ dependencies:
+ which-typed-array "^1.1.16"
+
+is-weakmap@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd"
+ integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==
+
+is-weakref@^1.0.2, is-weakref@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293"
+ integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==
+ dependencies:
+ call-bound "^1.0.3"
+
+is-weakset@^2.0.3:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca"
+ integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==
+ dependencies:
+ call-bound "^1.0.3"
+ get-intrinsic "^1.2.6"
+
+isarray@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+iterator.prototype@^1.1.4:
+ version "1.1.5"
+ resolved "https://registry.npmmirror.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39"
+ integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==
+ dependencies:
+ define-data-property "^1.1.4"
+ es-object-atoms "^1.0.0"
+ get-intrinsic "^1.2.6"
+ get-proto "^1.0.0"
+ has-symbols "^1.1.0"
+ set-function-name "^2.0.2"
+
+jackspeak@^3.1.2:
+ version "3.4.3"
+ resolved "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a"
+ integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
+jiti@^1.21.7:
+ version "1.21.7"
+ resolved "https://registry.npmmirror.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9"
+ integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsesc@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
+ integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json2mq@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
+ integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==
+ dependencies:
+ string-convert "^0.2.0"
+
+json5@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0":
+ version "3.3.5"
+ resolved "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a"
+ integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ object.assign "^4.1.4"
+ object.values "^1.1.6"
+
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+lilconfig@^3.1.1, lilconfig@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4"
+ integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^10.2.0:
+ version "10.4.3"
+ resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
+ integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+math-intrinsics@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
+ integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
+ dependencies:
+ braces "^3.0.3"
+ picomatch "^2.3.1"
+
+minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^9.0.4:
+ version "9.0.5"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
+ integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
+
+ms@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
+nanoid@^3.3.11:
+ version "3.3.11"
+ resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
+ integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+node-releases@^2.0.26:
+ version "2.0.27"
+ resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e"
+ integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+object-assign@^4.0.1, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-hash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+ integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
+object-inspect@^1.13.3, object-inspect@^1.13.4:
+ version "1.13.4"
+ resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
+ integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
+
+object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.4, object.assign@^4.1.7:
+ version "4.1.7"
+ resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d"
+ integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+ has-symbols "^1.1.0"
+ object-keys "^1.1.1"
+
+object.entries@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3"
+ integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.4"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.1.1"
+
+object.fromentries@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65"
+ integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
+
+object.values@^1.1.6, object.values@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216"
+ integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+optionator@^0.9.3:
+ version "0.9.4"
+ resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
+ integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.5"
+
+own-keys@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358"
+ integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==
+ dependencies:
+ get-intrinsic "^1.2.6"
+ object-keys "^1.1.1"
+ safe-push-apply "^1.0.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+package-json-from-dist@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
+ integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.11.1:
+ version "1.11.1"
+ resolved "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
+ integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
+ dependencies:
+ lru-cache "^10.2.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+picocolors@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
+ integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pirates@^4.0.1:
+ version "4.0.7"
+ resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22"
+ integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==
+
+possible-typed-array-names@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae"
+ integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==
+
+postcss-import@^15.1.0:
+ version "15.1.0"
+ resolved "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
+ integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==
+ dependencies:
+ postcss-value-parser "^4.0.0"
+ read-cache "^1.0.0"
+ resolve "^1.1.7"
+
+postcss-js@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.1.0.tgz#003b63c6edde948766e40f3daf7e997ae43a5ce6"
+ integrity sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==
+ dependencies:
+ camelcase-css "^2.0.1"
+
+"postcss-load-config@^4.0.2 || ^5.0 || ^6.0":
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz#6fd7dcd8ae89badcf1b2d644489cbabf83aa8096"
+ integrity sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==
+ dependencies:
+ lilconfig "^3.1.1"
+
+postcss-nested@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131"
+ integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==
+ dependencies:
+ postcss-selector-parser "^6.1.1"
+
+postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de"
+ integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@^8.4.32, postcss@^8.4.43, postcss@^8.4.47:
+ version "8.5.6"
+ resolved "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
+ integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
+ dependencies:
+ nanoid "^3.3.11"
+ picocolors "^1.1.1"
+ source-map-js "^1.2.1"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prop-types@^15.8.1:
+ version "15.8.1"
+ resolved "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+rc-cascader@~3.34.0:
+ version "3.34.0"
+ resolved "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.34.0.tgz#56f936ab6b1229bab7d558701ce9b9e96536582c"
+ integrity sha512-KpXypcvju9ptjW9FaN2NFcA2QH9E9LHKq169Y0eWtH4e/wHQ5Wh5qZakAgvb8EKZ736WZ3B0zLLOBsrsja5Dag==
+ dependencies:
+ "@babel/runtime" "^7.25.7"
+ classnames "^2.3.1"
+ rc-select "~14.16.2"
+ rc-tree "~5.13.0"
+ rc-util "^5.43.0"
+
+rc-checkbox@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.5.0.tgz#3ae2441e3a321774d390f76539e706864fcf5ff0"
+ integrity sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.3.2"
+ rc-util "^5.25.2"
+
+rc-collapse@~3.9.0:
+ version "3.9.0"
+ resolved "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.9.0.tgz#972404ce7724e1c9d1d2476543e1175404a36806"
+ integrity sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^2.3.4"
+ rc-util "^5.27.0"
+
+rc-dialog@~9.6.0:
+ version "9.6.0"
+ resolved "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-9.6.0.tgz#dc7a255c6ad1cb56021c3a61c7de86ee88c7c371"
+ integrity sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/portal" "^1.0.0-8"
+ classnames "^2.2.6"
+ rc-motion "^2.3.0"
+ rc-util "^5.21.0"
+
+rc-drawer@~7.3.0:
+ version "7.3.0"
+ resolved "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-7.3.0.tgz#1bb5fe5f9da38b6a2b2a7dffc9fcb647252a328f"
+ integrity sha512-DX6CIgiBWNpJIMGFO8BAISFkxiuKitoizooj4BDyee8/SnBn0zwO2FHrNDpqqepj0E/TFTDpmEBCyFuTgC7MOg==
+ dependencies:
+ "@babel/runtime" "^7.23.9"
+ "@rc-component/portal" "^1.1.1"
+ classnames "^2.2.6"
+ rc-motion "^2.6.1"
+ rc-util "^5.38.1"
+
+rc-dropdown@~4.2.0, rc-dropdown@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.1.tgz#44729eb2a4272e0353d31ac060da21e606accb1c"
+ integrity sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.2.6"
+ rc-util "^5.44.1"
+
+rc-field-form@~2.7.1:
+ version "2.7.1"
+ resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.7.1.tgz#8bb1d7c6bf40e2b99b494816972252c327d9b5a0"
+ integrity sha512-vKeSifSJ6HoLaAB+B8aq/Qgm8a3dyxROzCtKNCsBQgiverpc4kWDQihoUwzUj+zNWJOykwSY4dNX3QrGwtVb9A==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+ "@rc-component/async-validator" "^5.0.3"
+ rc-util "^5.32.2"
+
+rc-image@~7.12.0:
+ version "7.12.0"
+ resolved "https://registry.npmmirror.com/rc-image/-/rc-image-7.12.0.tgz#95e9314701e668217d113c1f29b4f01ac025cafe"
+ integrity sha512-cZ3HTyyckPnNnUb9/DRqduqzLfrQRyi+CdHjdqgsyDpI3Ln5UX1kXnAhPBSJj9pVRzwRFgqkN7p9b6HBDjmu/Q==
+ dependencies:
+ "@babel/runtime" "^7.11.2"
+ "@rc-component/portal" "^1.0.2"
+ classnames "^2.2.6"
+ rc-dialog "~9.6.0"
+ rc-motion "^2.6.2"
+ rc-util "^5.34.1"
+
+rc-input-number@~9.5.0:
+ version "9.5.0"
+ resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.5.0.tgz#b47963d0f2cbd85ab2f1badfdc089a904c073f38"
+ integrity sha512-bKaEvB5tHebUURAEXw35LDcnRZLq3x1k7GxfAqBMzmpHkDGzjAtnUL8y4y5N15rIFIg5IJgwr211jInl3cipag==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/mini-decimal" "^1.0.1"
+ classnames "^2.2.5"
+ rc-input "~1.8.0"
+ rc-util "^5.40.1"
+
+rc-input@~1.8.0:
+ version "1.8.0"
+ resolved "https://registry.npmmirror.com/rc-input/-/rc-input-1.8.0.tgz#d2f4404befebf2fbdc28390d5494c302f74ae974"
+ integrity sha512-KXvaTbX+7ha8a/k+eg6SYRVERK0NddX8QX7a7AnRvUa/rEH0CNMlpcBzBkhI0wp2C8C4HlMoYl8TImSN+fuHKA==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ rc-util "^5.18.1"
+
+rc-mentions@~2.20.0:
+ version "2.20.0"
+ resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.20.0.tgz#3bbeac0352b02e0ce3e1244adb48701bb6903bf7"
+ integrity sha512-w8HCMZEh3f0nR8ZEd466ATqmXFCMGMN5UFCzEUL0bM/nGw/wOS2GgRzKBcm19K++jDyuWCOJOdgcKGXU3fXfbQ==
+ dependencies:
+ "@babel/runtime" "^7.22.5"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.2.6"
+ rc-input "~1.8.0"
+ rc-menu "~9.16.0"
+ rc-textarea "~1.10.0"
+ rc-util "^5.34.1"
+
+rc-menu@~9.16.0, rc-menu@~9.16.1:
+ version "9.16.1"
+ resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.16.1.tgz#9df1168e41d87dc7164c582173e1a1d32011899f"
+ integrity sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "2.x"
+ rc-motion "^2.4.3"
+ rc-overflow "^1.3.1"
+ rc-util "^5.27.0"
+
+rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0, rc-motion@^2.9.5:
+ version "2.9.5"
+ resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.5.tgz#12c6ead4fd355f94f00de9bb4f15df576d677e0c"
+ integrity sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ rc-util "^5.44.0"
+
+rc-notification@~5.6.4:
+ version "5.6.4"
+ resolved "https://registry.npmmirror.com/rc-notification/-/rc-notification-5.6.4.tgz#ea89c39c13cd517fdfd97fe63f03376fabb78544"
+ integrity sha512-KcS4O6B4qzM3KH7lkwOB7ooLPZ4b6J+VMmQgT51VZCeEcmghdeR4IrMcFq0LG+RPdnbe/ArT086tGM8Snimgiw==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^2.9.0"
+ rc-util "^5.20.1"
+
+rc-overflow@^1.3.1, rc-overflow@^1.3.2:
+ version "1.5.0"
+ resolved "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.5.0.tgz#02e58a15199e392adfcc87e0d6e9e7c8e57f2771"
+ integrity sha512-Lm/v9h0LymeUYJf0x39OveU52InkdRXqnn2aYXfWmo8WdOonIKB2kfau+GF0fWq6jPgtdO9yMqveGcK6aIhJmg==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ rc-resize-observer "^1.0.0"
+ rc-util "^5.37.0"
+
+rc-pagination@~5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-5.1.0.tgz#a6e63a2c5db29e62f991282eb18a2d3ee725ba8b"
+ integrity sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.3.2"
+ rc-util "^5.38.0"
+
+rc-picker@~4.11.3:
+ version "4.11.3"
+ resolved "https://registry.npmmirror.com/rc-picker/-/rc-picker-4.11.3.tgz#7e7e3ad83aa461c284b8391c697492d1c34d2cb8"
+ integrity sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==
+ dependencies:
+ "@babel/runtime" "^7.24.7"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.2.1"
+ rc-overflow "^1.3.2"
+ rc-resize-observer "^1.4.0"
+ rc-util "^5.43.0"
+
+rc-progress@~4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-4.0.0.tgz#5382147d9add33d3a5fbd264001373df6440e126"
+ integrity sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.6"
+ rc-util "^5.16.1"
+
+rc-rate@~2.13.1:
+ version "2.13.1"
+ resolved "https://registry.npmmirror.com/rc-rate/-/rc-rate-2.13.1.tgz#29af7a3d4768362e9d4388f955a8b6389526b7fd"
+ integrity sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.5"
+ rc-util "^5.0.1"
+
+rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.3.1, rc-resize-observer@^1.4.0, rc-resize-observer@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.3.tgz#4fd41fa561ba51362b5155a07c35d7c89a1ea569"
+ integrity sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==
+ dependencies:
+ "@babel/runtime" "^7.20.7"
+ classnames "^2.2.1"
+ rc-util "^5.44.1"
+ resize-observer-polyfill "^1.5.1"
+
+rc-segmented@~2.7.0:
+ version "2.7.0"
+ resolved "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.7.0.tgz#f56c2044abf8f03958b3a9a9d32987f10dcc4fc4"
+ integrity sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ rc-motion "^2.4.4"
+ rc-util "^5.17.0"
+
+rc-select@~14.16.2, rc-select@~14.16.8:
+ version "14.16.8"
+ resolved "https://registry.npmmirror.com/rc-select/-/rc-select-14.16.8.tgz#78e6782f1ccc1f03d9003bc3effa4ed609d29a97"
+ integrity sha512-NOV5BZa1wZrsdkKaiK7LHRuo5ZjZYMDxPP6/1+09+FB4KoNi8jcG1ZqLE3AVCxEsYMBe65OBx71wFoHRTP3LRg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/trigger" "^2.1.1"
+ classnames "2.x"
+ rc-motion "^2.0.1"
+ rc-overflow "^1.3.1"
+ rc-util "^5.16.1"
+ rc-virtual-list "^3.5.2"
+
+rc-slider@~11.1.9:
+ version "11.1.9"
+ resolved "https://registry.npmmirror.com/rc-slider/-/rc-slider-11.1.9.tgz#d872130fbf4ec51f28543d62e90451091d6f5208"
+ integrity sha512-h8IknhzSh3FEM9u8ivkskh+Ef4Yo4JRIY2nj7MrH6GQmrwV6mcpJf5/4KgH5JaVI1H3E52yCdpOlVyGZIeph5A==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.5"
+ rc-util "^5.36.0"
+
+rc-steps@~6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/rc-steps/-/rc-steps-6.0.1.tgz#c2136cd0087733f6d509209a84a5c80dc29a274d"
+ integrity sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==
+ dependencies:
+ "@babel/runtime" "^7.16.7"
+ classnames "^2.2.3"
+ rc-util "^5.16.1"
+
+rc-switch@~4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/rc-switch/-/rc-switch-4.1.0.tgz#f37d81b4e0c5afd1274fd85367b17306bf25e7d7"
+ integrity sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==
+ dependencies:
+ "@babel/runtime" "^7.21.0"
+ classnames "^2.2.1"
+ rc-util "^5.30.0"
+
+rc-table@~7.54.0:
+ version "7.54.0"
+ resolved "https://registry.npmmirror.com/rc-table/-/rc-table-7.54.0.tgz#dedd4ea18d1189f2acdf90a80f04d8ca0111e16a"
+ integrity sha512-/wDTkki6wBTjwylwAGjpLKYklKo9YgjZwAU77+7ME5mBoS32Q4nAwoqhA2lSge6fobLW3Tap6uc5xfwaL2p0Sw==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/context" "^1.4.0"
+ classnames "^2.2.5"
+ rc-resize-observer "^1.1.0"
+ rc-util "^5.44.3"
+ rc-virtual-list "^3.14.2"
+
+rc-tabs@~15.7.0:
+ version "15.7.0"
+ resolved "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.7.0.tgz#14ca2ee6213d00491a8b67ae26e2d35c256bf19a"
+ integrity sha512-ZepiE+6fmozYdWf/9gVp7k56PKHB1YYoDsKeQA1CBlJ/POIhjkcYiv0AGP0w2Jhzftd3AVvZP/K+V+Lpi2ankA==
+ dependencies:
+ "@babel/runtime" "^7.11.2"
+ classnames "2.x"
+ rc-dropdown "~4.2.0"
+ rc-menu "~9.16.0"
+ rc-motion "^2.6.2"
+ rc-resize-observer "^1.0.0"
+ rc-util "^5.34.1"
+
+rc-textarea@~1.10.0, rc-textarea@~1.10.2:
+ version "1.10.2"
+ resolved "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.10.2.tgz#459e3574a95c32939c6793045a1e4db04cb514cc"
+ integrity sha512-HfaeXiaSlpiSp0I/pvWpecFEHpVysZ9tpDLNkxQbMvMz6gsr7aVZ7FpWP9kt4t7DB+jJXesYS0us1uPZnlRnwQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.1"
+ rc-input "~1.8.0"
+ rc-resize-observer "^1.0.0"
+ rc-util "^5.27.0"
+
+rc-tooltip@~6.4.0:
+ version "6.4.0"
+ resolved "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.4.0.tgz#e832ed0392872025e59928cfc1ad9045656467fd"
+ integrity sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==
+ dependencies:
+ "@babel/runtime" "^7.11.2"
+ "@rc-component/trigger" "^2.0.0"
+ classnames "^2.3.1"
+ rc-util "^5.44.3"
+
+rc-tree-select@~5.27.0:
+ version "5.27.0"
+ resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.27.0.tgz#3daa62972ae80846dac96bf4776d1a9dc9c7c4c6"
+ integrity sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==
+ dependencies:
+ "@babel/runtime" "^7.25.7"
+ classnames "2.x"
+ rc-select "~14.16.2"
+ rc-tree "~5.13.0"
+ rc-util "^5.43.0"
+
+rc-tree@~5.13.0, rc-tree@~5.13.1:
+ version "5.13.1"
+ resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.13.1.tgz#f36a33a94a1282f4b09685216c01487089748910"
+ integrity sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^2.0.1"
+ rc-util "^5.16.1"
+ rc-virtual-list "^3.5.1"
+
+rc-upload@~4.11.0:
+ version "4.11.0"
+ resolved "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.11.0.tgz#c2ced905a8b38b3e5c48493d388ca0e8373de18b"
+ integrity sha512-ZUyT//2JAehfHzjWowqROcwYJKnZkIUGWaTE/VogVrepSl7AFNbQf4+zGfX4zl9Vrj/Jm8scLO0R6UlPDKK4wA==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ classnames "^2.2.5"
+ rc-util "^5.2.0"
+
+rc-util@^5.0.1, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1, rc-util@^5.40.1, rc-util@^5.43.0, rc-util@^5.44.0, rc-util@^5.44.1, rc-util@^5.44.3, rc-util@^5.44.4:
+ version "5.44.4"
+ resolved "https://registry.npmmirror.com/rc-util/-/rc-util-5.44.4.tgz#89ee9037683cca01cd60f1a6bbda761457dd6ba5"
+ integrity sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ react-is "^18.2.0"
+
+rc-virtual-list@^3.14.2, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2:
+ version "3.19.2"
+ resolved "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.19.2.tgz#1dd2d782c9a3ccbe537bb873447d73f83af8de0f"
+ integrity sha512-Ys6NcjwGkuwkeaWBDqfI3xWuZ7rDiQXlH1o2zLfFzATfEgXcqpk8CkgMfbJD81McqjcJVez25a3kPxCR807evA==
+ dependencies:
+ "@babel/runtime" "^7.20.0"
+ classnames "^2.2.6"
+ rc-resize-observer "^1.0.0"
+ rc-util "^5.36.0"
+
+react-dom@^18.2.0:
+ version "18.3.1"
+ resolved "https://registry.npmmirror.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4"
+ integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
+ dependencies:
+ loose-envify "^1.1.0"
+ scheduler "^0.23.2"
+
+react-is@^16.13.1:
+ version "16.13.1"
+ resolved "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-is@^18.2.0:
+ version "18.3.1"
+ resolved "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
+ integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
+
+react-refresh@^0.17.0:
+ version "0.17.0"
+ resolved "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
+ integrity sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==
+
+react-router-dom@^6.20.0:
+ version "6.30.1"
+ resolved "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.30.1.tgz#da2580c272ddb61325e435478566be9563a4a237"
+ integrity sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==
+ dependencies:
+ "@remix-run/router" "1.23.0"
+ react-router "6.30.1"
+
+react-router@6.30.1:
+ version "6.30.1"
+ resolved "https://registry.npmmirror.com/react-router/-/react-router-6.30.1.tgz#ecb3b883c9ba6dbf5d319ddbc996747f4ab9f4c3"
+ integrity sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==
+ dependencies:
+ "@remix-run/router" "1.23.0"
+
+react@^18.2.0:
+ version "18.3.1"
+ resolved "https://registry.npmmirror.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
+ integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
+read-cache@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
+ integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
+ dependencies:
+ pify "^2.3.0"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9:
+ version "1.0.10"
+ resolved "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9"
+ integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.9"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ get-intrinsic "^1.2.7"
+ get-proto "^1.0.1"
+ which-builtin-type "^1.2.1"
+
+regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4:
+ version "1.5.4"
+ resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19"
+ integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-errors "^1.3.0"
+ get-proto "^1.0.1"
+ gopd "^1.2.0"
+ set-function-name "^2.0.2"
+
+resize-observer-polyfill@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+ integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve@^1.1.7, resolve@^1.22.8:
+ version "1.22.11"
+ resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262"
+ integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==
+ dependencies:
+ is-core-module "^2.16.1"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^2.0.0-next.5:
+ version "2.0.0-next.5"
+ resolved "https://registry.npmmirror.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c"
+ integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+reusify@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
+ integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+rollup@^4.20.0:
+ version "4.52.5"
+ resolved "https://registry.npmmirror.com/rollup/-/rollup-4.52.5.tgz#96982cdcaedcdd51b12359981f240f94304ec235"
+ integrity sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==
+ dependencies:
+ "@types/estree" "1.0.8"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.52.5"
+ "@rollup/rollup-android-arm64" "4.52.5"
+ "@rollup/rollup-darwin-arm64" "4.52.5"
+ "@rollup/rollup-darwin-x64" "4.52.5"
+ "@rollup/rollup-freebsd-arm64" "4.52.5"
+ "@rollup/rollup-freebsd-x64" "4.52.5"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.52.5"
+ "@rollup/rollup-linux-arm-musleabihf" "4.52.5"
+ "@rollup/rollup-linux-arm64-gnu" "4.52.5"
+ "@rollup/rollup-linux-arm64-musl" "4.52.5"
+ "@rollup/rollup-linux-loong64-gnu" "4.52.5"
+ "@rollup/rollup-linux-ppc64-gnu" "4.52.5"
+ "@rollup/rollup-linux-riscv64-gnu" "4.52.5"
+ "@rollup/rollup-linux-riscv64-musl" "4.52.5"
+ "@rollup/rollup-linux-s390x-gnu" "4.52.5"
+ "@rollup/rollup-linux-x64-gnu" "4.52.5"
+ "@rollup/rollup-linux-x64-musl" "4.52.5"
+ "@rollup/rollup-openharmony-arm64" "4.52.5"
+ "@rollup/rollup-win32-arm64-msvc" "4.52.5"
+ "@rollup/rollup-win32-ia32-msvc" "4.52.5"
+ "@rollup/rollup-win32-x64-gnu" "4.52.5"
+ "@rollup/rollup-win32-x64-msvc" "4.52.5"
+ fsevents "~2.3.2"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-array-concat@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3"
+ integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.2"
+ get-intrinsic "^1.2.6"
+ has-symbols "^1.1.0"
+ isarray "^2.0.5"
+
+safe-push-apply@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5"
+ integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==
+ dependencies:
+ es-errors "^1.3.0"
+ isarray "^2.0.5"
+
+safe-regex-test@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1"
+ integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ is-regex "^1.2.1"
+
+scheduler@^0.23.2:
+ version "0.23.2"
+ resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3"
+ integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
+scroll-into-view-if-needed@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz#fa9524518c799b45a2ef6bbffb92bcad0296d01f"
+ integrity sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==
+ dependencies:
+ compute-scroll-into-view "^3.0.2"
+
+semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+set-function-length@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
+ integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
+ dependencies:
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.2"
+
+set-function-name@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
+ integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
+ dependencies:
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ functions-have-names "^1.2.3"
+ has-property-descriptors "^1.0.2"
+
+set-proto@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e"
+ integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==
+ dependencies:
+ dunder-proto "^1.0.1"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+side-channel-list@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
+ integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
+ dependencies:
+ es-errors "^1.3.0"
+ object-inspect "^1.13.3"
+
+side-channel-map@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42"
+ integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.5"
+ object-inspect "^1.13.3"
+
+side-channel-weakmap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea"
+ integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
+ 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"
+
+side-channel@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
+ integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
+ 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"
+
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+source-map-js@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
+ integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
+
+stop-iteration-iterator@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad"
+ integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==
+ dependencies:
+ es-errors "^1.3.0"
+ internal-slot "^1.1.0"
+
+string-convert@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
+ integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==
+
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^4.1.0:
+ version "4.2.3"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
+string.prototype.matchall@^4.0.12:
+ version "4.0.12"
+ resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0"
+ integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.6"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ get-intrinsic "^1.2.6"
+ gopd "^1.2.0"
+ has-symbols "^1.1.0"
+ internal-slot "^1.1.0"
+ regexp.prototype.flags "^1.5.3"
+ set-function-name "^2.0.2"
+ side-channel "^1.1.0"
+
+string.prototype.repeat@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a"
+ integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+string.prototype.trim@^1.2.10:
+ version "1.2.10"
+ resolved "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81"
+ integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.2"
+ define-data-property "^1.1.4"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-object-atoms "^1.0.0"
+ has-property-descriptors "^1.0.2"
+
+string.prototype.trimend@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942"
+ integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.2"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+string.prototype.trimstart@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde"
+ integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+ version "7.1.2"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba"
+ integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+stylis@^4.3.4:
+ version "4.3.6"
+ resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz#7c7b97191cb4f195f03ecab7d52f7902ed378320"
+ integrity sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==
+
+sucrase@^3.35.0:
+ version "3.35.0"
+ resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
+ integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.2"
+ commander "^4.0.0"
+ glob "^10.3.10"
+ lines-and-columns "^1.1.6"
+ mz "^2.7.0"
+ pirates "^4.0.1"
+ ts-interface-checker "^0.1.9"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+tailwindcss@^3.3.6:
+ version "3.4.18"
+ resolved "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.18.tgz#9fa9650aace186644b608242f1e57d2d55593301"
+ integrity sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==
+ dependencies:
+ "@alloc/quick-lru" "^5.2.0"
+ arg "^5.0.2"
+ chokidar "^3.6.0"
+ didyoumean "^1.2.2"
+ dlv "^1.1.3"
+ fast-glob "^3.3.2"
+ glob-parent "^6.0.2"
+ is-glob "^4.0.3"
+ jiti "^1.21.7"
+ lilconfig "^3.1.3"
+ micromatch "^4.0.8"
+ normalize-path "^3.0.0"
+ object-hash "^3.0.0"
+ picocolors "^1.1.1"
+ postcss "^8.4.47"
+ postcss-import "^15.1.0"
+ postcss-js "^4.0.1"
+ postcss-load-config "^4.0.2 || ^5.0 || ^6.0"
+ postcss-nested "^6.2.0"
+ postcss-selector-parser "^6.1.2"
+ resolve "^1.22.8"
+ sucrase "^3.35.0"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
+throttle-debounce@^5.0.0, throttle-debounce@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1"
+ integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+toggle-selection@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
+ integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==
+
+ts-interface-checker@^0.1.9:
+ version "0.1.13"
+ resolved "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
+ integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+typed-array-buffer@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536"
+ integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ is-typed-array "^1.1.14"
+
+typed-array-byte-length@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce"
+ integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==
+ dependencies:
+ call-bind "^1.0.8"
+ for-each "^0.3.3"
+ gopd "^1.2.0"
+ has-proto "^1.2.0"
+ is-typed-array "^1.1.14"
+
+typed-array-byte-offset@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355"
+ integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==
+ dependencies:
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.8"
+ for-each "^0.3.3"
+ gopd "^1.2.0"
+ has-proto "^1.2.0"
+ is-typed-array "^1.1.15"
+ reflect.getprototypeof "^1.0.9"
+
+typed-array-length@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d"
+ integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==
+ dependencies:
+ call-bind "^1.0.7"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ is-typed-array "^1.1.13"
+ possible-typed-array-names "^1.0.0"
+ reflect.getprototypeof "^1.0.6"
+
+unbox-primitive@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2"
+ integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==
+ dependencies:
+ call-bound "^1.0.3"
+ has-bigints "^1.0.2"
+ has-symbols "^1.1.0"
+ which-boxed-primitive "^1.1.1"
+
+update-browserslist-db@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a"
+ integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==
+ dependencies:
+ escalade "^3.2.0"
+ picocolors "^1.1.1"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+util-deprecate@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+vite@^5.0.8:
+ version "5.4.21"
+ resolved "https://registry.npmmirror.com/vite/-/vite-5.4.21.tgz#84a4f7c5d860b071676d39ba513c0d598fdc7027"
+ integrity sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==
+ dependencies:
+ esbuild "^0.21.3"
+ postcss "^8.4.43"
+ rollup "^4.20.0"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e"
+ integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==
+ dependencies:
+ is-bigint "^1.1.0"
+ is-boolean-object "^1.2.1"
+ is-number-object "^1.1.1"
+ is-string "^1.1.1"
+ is-symbol "^1.1.1"
+
+which-builtin-type@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e"
+ integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==
+ dependencies:
+ call-bound "^1.0.2"
+ function.prototype.name "^1.1.6"
+ has-tostringtag "^1.0.2"
+ is-async-function "^2.0.0"
+ is-date-object "^1.1.0"
+ is-finalizationregistry "^1.1.0"
+ is-generator-function "^1.0.10"
+ is-regex "^1.2.1"
+ is-weakref "^1.0.2"
+ isarray "^2.0.5"
+ which-boxed-primitive "^1.1.0"
+ which-collection "^1.0.2"
+ which-typed-array "^1.1.16"
+
+which-collection@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0"
+ integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==
+ dependencies:
+ is-map "^2.0.3"
+ is-set "^2.0.3"
+ is-weakmap "^2.0.2"
+ is-weakset "^2.0.3"
+
+which-typed-array@^1.1.16, which-typed-array@^1.1.19:
+ version "1.1.19"
+ resolved "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956"
+ integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==
+ dependencies:
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.8"
+ call-bound "^1.0.4"
+ for-each "^0.3.5"
+ get-proto "^1.0.1"
+ gopd "^1.2.0"
+ has-tostringtag "^1.0.2"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+word-wrap@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==