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 ( +
+ {/* 左侧:Logo + 折叠按钮 */} +
+ {/* Logo 区域 */} +
+ NEX Console +
+ + {/* 折叠按钮 */} +
+ {collapsed ? : } +
+
+ + {/* 右侧:搜索 + 功能按钮 + 用户信息 */} +
+ {/* 搜索框 */} + } + style={{ width: 200 }} + /> + + {/* 功能图标 */} + + {/* 动态渲染 header 菜单 */} + {headerMenuData.map((item) => ( +
handleHeaderMenuClick(item.key)} + > + {iconMap[item.icon]} + {item.label} +
+ ))} + + {/* 消息中心 */} + +
+ +
+
+ + {/* 用户下拉菜单 */} + +
+ } /> + Admin +
+
+
+
+
+ ) +} + +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 ( + + {/* 菜单 */} + + {renderMenuItems()} + + + ) +} + +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()}> + + , + }, + { + 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' }} + /> + + + + + )} + + {/* 操作栏 */} +
+
+ + + + +
+
+ + handleSearch(e.target.value)} + value={searchKeyword} + /> + + + 高级筛选 +
+ } + trigger="click" + open={showFilterPopover} + onOpenChange={(visible) => { + setShowFilterPopover(visible) + if (visible) { + setTempSelectedGroup(selectedGroup) + } + }} + placement="bottomRight" + overlayClassName="filter-popover" + > + + + + +
+ + + {/* 数据表格 */} +
+
`共 ${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 && ( +
+ {/* 顶部标题栏 */} +
+
+
+
+ + + + +
+
+ + {/* 可滚动内容区域 */} +
+ {/* 主机信息面板 */} +
+ +
+
+
终端名称:
+
{selectedHost.name}
+
+ + +
+
终端分组:
+
{selectedHost.group}
+
+ + +
+
MAC地址:
+
{selectedHost.mac}
+
+ + +
+
授权用户:
+
3
+
+ + +
+
IP地址:
+
{selectedHost.ip}
+
+ + +
+
授权镜像:
+
1
+
+ + +
+
终端状态:
+
+ + {selectedHost.status === 'online' ? '在线' : '离线'} + +
+
+ + +
+
系统盘总容量:
+
{selectedHost.systemDisk}
+
+ + +
+
数据盘总容量:
+
{selectedHost.dataDisk}
+
+ + +
+
描述:
+
--
+
+ + + + {/* 操作按钮区 */} +
+ + + + + + + + +
+ + + {/* 标签页区域 */} +
+ + + 终端镜像 + + ), + 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()}> + + + + + ), + }, + ] + + // 行选择配置 + 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 ( +
+ {/* 页面标题栏 */} + + + {/* 操作栏 */} +
+
+ + +
+
+ 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 && ( +
+ {/* 顶部标题栏 */} +
+
+
+
+ + + + +
+
+ + {/* 可滚动内容区域 */} +
+ {/* 镜像信息面板 */} +
+ +
+
+
镜像名称:
+
{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()}> + + + + + ), + }, + ] + + // 行选择配置 + 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' }} + /> + + + + + )} + + {/* 操作栏 */} +
+
+ + +
+
+ + handleSearch(e.target.value)} + value={searchKeyword} + /> + + + 高级筛选 +
+ } + trigger="click" + open={showFilterPopover} + onOpenChange={(visible) => { + setShowFilterPopover(visible) + if (visible) { + setTempSelectedGroup(selectedGroup) + } + }} + placement="bottomRight" + overlayClassName="filter-popover" + > + + + + +
+ + + {/* 数据表格 */} +
+
`共 ${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 && ( +
+ {/* 顶部标题栏 - 固定不滚动 */} +
+
+
+
+ + + + +
+
+ + {/* 可滚动内容区域 */} +
+ {/* 用户信息面板 */} +
+ +
+
+
用户名:
+
{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==