From a8a84c00da6dc330adb4e6f288e4629ed3168421 Mon Sep 17 00:00:00 2001 From: Lxy Date: Sat, 14 Mar 2026 16:11:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=88=9D=E5=A7=8B=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEPLOY.md | 230 + PROJECT_SUMMARY.md | 255 + app/Dockerfile | 31 + app/README.md | 73 + app/components.json | 22 + app/dist/assets/index-BYX1qVyV.css | 1 + app/dist/assets/index-BYfknKCx.js | 59 + app/dist/index.html | 13 + app/eslint.config.js | 23 + app/index.html | 12 + app/info.md | 31 + app/nginx.conf | 59 + app/package-lock.json | 8264 +++++++++++++++++ app/package.json | 82 + app/postcss.config.js | 6 + app/server/.env | 47 + app/server/.env.example | 47 + app/server/Dockerfile | 44 + app/server/nest-cli.json | 9 + app/server/package.json | 103 + app/server/prisma/schema.prisma | 265 + app/server/prisma/seed.ts | 150 + app/server/src/ai/ai.controller.ts | 31 + app/server/src/ai/ai.module.ts | 14 + app/server/src/ai/ai.service.ts | 366 + app/server/src/alert/alert.module.ts | 10 + app/server/src/alert/alert.service.ts | 161 + app/server/src/app.module.ts | 87 + app/server/src/auth/auth.controller.ts | 76 + app/server/src/auth/auth.module.ts | 26 + app/server/src/auth/auth.service.ts | 212 + .../auth/decorators/current-user.decorator.ts | 14 + app/server/src/auth/dto/auth.dto.ts | 88 + app/server/src/auth/guards/jwt-auth.guard.ts | 19 + .../src/auth/strategies/jwt.strategy.ts | 38 + app/server/src/common/common.module.ts | 9 + .../interceptors/logging.interceptor.ts | 30 + .../interceptors/transform.interceptor.ts | 33 + app/server/src/common/prisma/prisma.module.ts | 9 + .../src/common/prisma/prisma.service.ts | 23 + app/server/src/common/redis/redis.module.ts | 30 + app/server/src/common/redis/redis.service.ts | 119 + app/server/src/config/app.config.ts | 11 + app/server/src/config/database.config.ts | 5 + app/server/src/config/jwt.config.ts | 7 + app/server/src/config/market-data.config.ts | 14 + app/server/src/config/openai.config.ts | 14 + app/server/src/config/redis.config.ts | 6 + app/server/src/events/events.controller.ts | 42 + app/server/src/events/events.module.ts | 12 + app/server/src/events/events.service.ts | 170 + .../src/indicators/dto/indicator.dto.ts | 20 + .../src/indicators/indicators.controller.ts | 98 + .../src/indicators/indicators.module.ts | 12 + .../src/indicators/indicators.service.ts | 392 + .../interfaces/indicator.interface.ts | 92 + app/server/src/main.ts | 81 + app/server/src/market/dto/market.dto.ts | 50 + app/server/src/market/guards/ws-jwt.guard.ts | 46 + .../src/market/interfaces/market.interface.ts | 57 + .../src/market/market-data-feed.service.ts | 188 + app/server/src/market/market.controller.ts | 58 + app/server/src/market/market.gateway.ts | 134 + app/server/src/market/market.module.ts | 12 + app/server/src/market/market.service.ts | 257 + app/server/src/options/dto/options.dto.ts | 59 + .../options/interfaces/options.interface.ts | 82 + app/server/src/options/options.controller.ts | 219 + app/server/src/options/options.module.ts | 12 + app/server/src/options/options.service.ts | 338 + app/server/src/user/user.controller.ts | 18 + app/server/src/user/user.module.ts | 10 + app/server/src/user/user.service.ts | 19 + .../src/watchlist/watchlist.controller.ts | 68 + app/server/src/watchlist/watchlist.module.ts | 12 + app/server/src/watchlist/watchlist.service.ts | 149 + app/server/tsconfig.json | 26 + app/src/App.css | 42 + app/src/App.tsx | 353 + app/src/components/HotEvents.tsx | 178 + app/src/components/KLineChart.tsx | 373 + app/src/components/MarketOverview.tsx | 162 + app/src/components/Navbar.tsx | 150 + app/src/components/ProductCard.tsx | 168 + app/src/components/ProductDetail.tsx | 380 + app/src/components/RiskAlerts.tsx | 100 + app/src/components/ui/accordion.tsx | 64 + app/src/components/ui/alert-dialog.tsx | 155 + app/src/components/ui/alert.tsx | 66 + app/src/components/ui/aspect-ratio.tsx | 11 + app/src/components/ui/avatar.tsx | 51 + app/src/components/ui/badge.tsx | 46 + app/src/components/ui/breadcrumb.tsx | 109 + app/src/components/ui/button-group.tsx | 83 + app/src/components/ui/button.tsx | 62 + app/src/components/ui/calendar.tsx | 220 + app/src/components/ui/card.tsx | 92 + app/src/components/ui/carousel.tsx | 239 + app/src/components/ui/chart.tsx | 357 + app/src/components/ui/checkbox.tsx | 32 + app/src/components/ui/collapsible.tsx | 31 + app/src/components/ui/command.tsx | 182 + app/src/components/ui/context-menu.tsx | 252 + app/src/components/ui/dialog.tsx | 141 + app/src/components/ui/drawer.tsx | 135 + app/src/components/ui/dropdown-menu.tsx | 255 + app/src/components/ui/empty.tsx | 104 + app/src/components/ui/field.tsx | 246 + app/src/components/ui/form.tsx | 167 + app/src/components/ui/hover-card.tsx | 44 + app/src/components/ui/input-group.tsx | 170 + app/src/components/ui/input-otp.tsx | 75 + app/src/components/ui/input.tsx | 21 + app/src/components/ui/item.tsx | 193 + app/src/components/ui/kbd.tsx | 28 + app/src/components/ui/label.tsx | 24 + app/src/components/ui/menubar.tsx | 274 + app/src/components/ui/navigation-menu.tsx | 168 + app/src/components/ui/pagination.tsx | 127 + app/src/components/ui/popover.tsx | 48 + app/src/components/ui/progress.tsx | 29 + app/src/components/ui/radio-group.tsx | 45 + app/src/components/ui/resizable.tsx | 54 + app/src/components/ui/scroll-area.tsx | 58 + app/src/components/ui/select.tsx | 188 + app/src/components/ui/separator.tsx | 28 + app/src/components/ui/sheet.tsx | 137 + app/src/components/ui/sidebar.tsx | 726 ++ app/src/components/ui/skeleton.tsx | 13 + app/src/components/ui/slider.tsx | 63 + app/src/components/ui/sonner.tsx | 38 + app/src/components/ui/spinner.tsx | 16 + app/src/components/ui/switch.tsx | 31 + app/src/components/ui/table.tsx | 114 + app/src/components/ui/tabs.tsx | 66 + app/src/components/ui/textarea.tsx | 18 + app/src/components/ui/toggle-group.tsx | 81 + app/src/components/ui/toggle.tsx | 45 + app/src/components/ui/tooltip.tsx | 61 + app/src/data/mockData.ts | 466 + app/src/hooks/use-mobile.ts | 19 + app/src/index.css | 141 + app/src/lib/utils.ts | 6 + app/src/main.tsx | 10 + app/src/services/api.ts | 123 + app/src/services/websocket.ts | 87 + app/src/types/index.ts | 135 + app/tailwind.config.js | 84 + app/tsconfig.app.json | 34 + app/tsconfig.json | 17 + app/tsconfig.node.json | 26 + app/vite.config.ts | 23 + docker-compose.yml | 119 + docs/01-项目概述.md | 85 + docs/02-开发文档.md | 219 + docs/03-后续扩展计划.md | 361 + docs/04-API接口文档.md | 542 ++ docs/05-部署文档.md | 449 + docs/06-前端组件文档.md | 545 ++ docs/07-TODO计划.md | 338 + docs/README.md | 218 + nginx.conf | 42 + start.bat | 56 + start.sh | 49 + 示意图1.png | Bin 0 -> 243911 bytes 示意图2.png | Bin 0 -> 154899 bytes 示意图3.png | Bin 0 -> 136788 bytes 示意图4.png | Bin 0 -> 155520 bytes 168 files changed, 26194 insertions(+) create mode 100644 DEPLOY.md create mode 100644 PROJECT_SUMMARY.md create mode 100644 app/Dockerfile create mode 100644 app/README.md create mode 100644 app/components.json create mode 100644 app/dist/assets/index-BYX1qVyV.css create mode 100644 app/dist/assets/index-BYfknKCx.js create mode 100644 app/dist/index.html create mode 100644 app/eslint.config.js create mode 100644 app/index.html create mode 100644 app/info.md create mode 100644 app/nginx.conf create mode 100644 app/package-lock.json create mode 100644 app/package.json create mode 100644 app/postcss.config.js create mode 100644 app/server/.env create mode 100644 app/server/.env.example create mode 100644 app/server/Dockerfile create mode 100644 app/server/nest-cli.json create mode 100644 app/server/package.json create mode 100644 app/server/prisma/schema.prisma create mode 100644 app/server/prisma/seed.ts create mode 100644 app/server/src/ai/ai.controller.ts create mode 100644 app/server/src/ai/ai.module.ts create mode 100644 app/server/src/ai/ai.service.ts create mode 100644 app/server/src/alert/alert.module.ts create mode 100644 app/server/src/alert/alert.service.ts create mode 100644 app/server/src/app.module.ts create mode 100644 app/server/src/auth/auth.controller.ts create mode 100644 app/server/src/auth/auth.module.ts create mode 100644 app/server/src/auth/auth.service.ts create mode 100644 app/server/src/auth/decorators/current-user.decorator.ts create mode 100644 app/server/src/auth/dto/auth.dto.ts create mode 100644 app/server/src/auth/guards/jwt-auth.guard.ts create mode 100644 app/server/src/auth/strategies/jwt.strategy.ts create mode 100644 app/server/src/common/common.module.ts create mode 100644 app/server/src/common/interceptors/logging.interceptor.ts create mode 100644 app/server/src/common/interceptors/transform.interceptor.ts create mode 100644 app/server/src/common/prisma/prisma.module.ts create mode 100644 app/server/src/common/prisma/prisma.service.ts create mode 100644 app/server/src/common/redis/redis.module.ts create mode 100644 app/server/src/common/redis/redis.service.ts create mode 100644 app/server/src/config/app.config.ts create mode 100644 app/server/src/config/database.config.ts create mode 100644 app/server/src/config/jwt.config.ts create mode 100644 app/server/src/config/market-data.config.ts create mode 100644 app/server/src/config/openai.config.ts create mode 100644 app/server/src/config/redis.config.ts create mode 100644 app/server/src/events/events.controller.ts create mode 100644 app/server/src/events/events.module.ts create mode 100644 app/server/src/events/events.service.ts create mode 100644 app/server/src/indicators/dto/indicator.dto.ts create mode 100644 app/server/src/indicators/indicators.controller.ts create mode 100644 app/server/src/indicators/indicators.module.ts create mode 100644 app/server/src/indicators/indicators.service.ts create mode 100644 app/server/src/indicators/interfaces/indicator.interface.ts create mode 100644 app/server/src/main.ts create mode 100644 app/server/src/market/dto/market.dto.ts create mode 100644 app/server/src/market/guards/ws-jwt.guard.ts create mode 100644 app/server/src/market/interfaces/market.interface.ts create mode 100644 app/server/src/market/market-data-feed.service.ts create mode 100644 app/server/src/market/market.controller.ts create mode 100644 app/server/src/market/market.gateway.ts create mode 100644 app/server/src/market/market.module.ts create mode 100644 app/server/src/market/market.service.ts create mode 100644 app/server/src/options/dto/options.dto.ts create mode 100644 app/server/src/options/interfaces/options.interface.ts create mode 100644 app/server/src/options/options.controller.ts create mode 100644 app/server/src/options/options.module.ts create mode 100644 app/server/src/options/options.service.ts create mode 100644 app/server/src/user/user.controller.ts create mode 100644 app/server/src/user/user.module.ts create mode 100644 app/server/src/user/user.service.ts create mode 100644 app/server/src/watchlist/watchlist.controller.ts create mode 100644 app/server/src/watchlist/watchlist.module.ts create mode 100644 app/server/src/watchlist/watchlist.service.ts create mode 100644 app/server/tsconfig.json create mode 100644 app/src/App.css create mode 100644 app/src/App.tsx create mode 100644 app/src/components/HotEvents.tsx create mode 100644 app/src/components/KLineChart.tsx create mode 100644 app/src/components/MarketOverview.tsx create mode 100644 app/src/components/Navbar.tsx create mode 100644 app/src/components/ProductCard.tsx create mode 100644 app/src/components/ProductDetail.tsx create mode 100644 app/src/components/RiskAlerts.tsx create mode 100644 app/src/components/ui/accordion.tsx create mode 100644 app/src/components/ui/alert-dialog.tsx create mode 100644 app/src/components/ui/alert.tsx create mode 100644 app/src/components/ui/aspect-ratio.tsx create mode 100644 app/src/components/ui/avatar.tsx create mode 100644 app/src/components/ui/badge.tsx create mode 100644 app/src/components/ui/breadcrumb.tsx create mode 100644 app/src/components/ui/button-group.tsx create mode 100644 app/src/components/ui/button.tsx create mode 100644 app/src/components/ui/calendar.tsx create mode 100644 app/src/components/ui/card.tsx create mode 100644 app/src/components/ui/carousel.tsx create mode 100644 app/src/components/ui/chart.tsx create mode 100644 app/src/components/ui/checkbox.tsx create mode 100644 app/src/components/ui/collapsible.tsx create mode 100644 app/src/components/ui/command.tsx create mode 100644 app/src/components/ui/context-menu.tsx create mode 100644 app/src/components/ui/dialog.tsx create mode 100644 app/src/components/ui/drawer.tsx create mode 100644 app/src/components/ui/dropdown-menu.tsx create mode 100644 app/src/components/ui/empty.tsx create mode 100644 app/src/components/ui/field.tsx create mode 100644 app/src/components/ui/form.tsx create mode 100644 app/src/components/ui/hover-card.tsx create mode 100644 app/src/components/ui/input-group.tsx create mode 100644 app/src/components/ui/input-otp.tsx create mode 100644 app/src/components/ui/input.tsx create mode 100644 app/src/components/ui/item.tsx create mode 100644 app/src/components/ui/kbd.tsx create mode 100644 app/src/components/ui/label.tsx create mode 100644 app/src/components/ui/menubar.tsx create mode 100644 app/src/components/ui/navigation-menu.tsx create mode 100644 app/src/components/ui/pagination.tsx create mode 100644 app/src/components/ui/popover.tsx create mode 100644 app/src/components/ui/progress.tsx create mode 100644 app/src/components/ui/radio-group.tsx create mode 100644 app/src/components/ui/resizable.tsx create mode 100644 app/src/components/ui/scroll-area.tsx create mode 100644 app/src/components/ui/select.tsx create mode 100644 app/src/components/ui/separator.tsx create mode 100644 app/src/components/ui/sheet.tsx create mode 100644 app/src/components/ui/sidebar.tsx create mode 100644 app/src/components/ui/skeleton.tsx create mode 100644 app/src/components/ui/slider.tsx create mode 100644 app/src/components/ui/sonner.tsx create mode 100644 app/src/components/ui/spinner.tsx create mode 100644 app/src/components/ui/switch.tsx create mode 100644 app/src/components/ui/table.tsx create mode 100644 app/src/components/ui/tabs.tsx create mode 100644 app/src/components/ui/textarea.tsx create mode 100644 app/src/components/ui/toggle-group.tsx create mode 100644 app/src/components/ui/toggle.tsx create mode 100644 app/src/components/ui/tooltip.tsx create mode 100644 app/src/data/mockData.ts create mode 100644 app/src/hooks/use-mobile.ts create mode 100644 app/src/index.css create mode 100644 app/src/lib/utils.ts create mode 100644 app/src/main.tsx create mode 100644 app/src/services/api.ts create mode 100644 app/src/services/websocket.ts create mode 100644 app/src/types/index.ts create mode 100644 app/tailwind.config.js create mode 100644 app/tsconfig.app.json create mode 100644 app/tsconfig.json create mode 100644 app/tsconfig.node.json create mode 100644 app/vite.config.ts create mode 100644 docker-compose.yml create mode 100644 docs/01-项目概述.md create mode 100644 docs/02-开发文档.md create mode 100644 docs/03-后续扩展计划.md create mode 100644 docs/04-API接口文档.md create mode 100644 docs/05-部署文档.md create mode 100644 docs/06-前端组件文档.md create mode 100644 docs/07-TODO计划.md create mode 100644 docs/README.md create mode 100644 nginx.conf create mode 100644 start.bat create mode 100644 start.sh create mode 100644 示意图1.png create mode 100644 示意图2.png create mode 100644 示意图3.png create mode 100644 示意图4.png diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..917d45d --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,230 @@ +# 智能期货期权分析系统 - 部署指南 + +## 系统架构 + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ Nginx │──────▶ 前端 (React) │ │ 后端 (NestJS) │ +│ (反向代理) │ │ Port: 80 │ │ Port: 3000 │ +└─────────────────┘ └─────────────────┘ └────────┬────────┘ + │ + ┌─────────────────┐ │ + │ PostgreSQL │◀───────┤ + │ Port: 5432 │ │ + └─────────────────┘ │ + ┌─────────────────┐ │ + │ Redis │◀───────┘ + │ Port: 6379 │ + └─────────────────┘ +``` + +## 快速开始 + +### 方式一:Docker Compose (推荐) + +```bash +# 1. 克隆代码 +git clone +cd AlphaFuturesProMax + +# 2. 设置环境变量 +cp app/server/.env.example app/server/.env +# 编辑 .env 文件,设置必要的配置 + +# 3. 启动服务 +docker-compose up -d + +# 4. 查看日志 +docker-compose logs -f backend + +# 5. 停止服务 +docker-compose down +``` + +### 方式二:手动部署 + +#### 1. 环境要求 + +- Node.js 20+ +- PostgreSQL 15+ +- Redis 7+ + +#### 2. 后端部署 + +```bash +# 进入后端目录 +cd app/server + +# 安装依赖 +npm install + +# 设置环境变量 +cp .env.example .env +# 编辑 .env 配置数据库连接等信息 + +# 执行数据库迁移 +npx prisma migrate deploy + +# 生成Prisma客户端 +npx prisma generate + +# 导入种子数据 +npx prisma db seed + +# 启动服务 +npm run start:prod +``` + +#### 3. 前端部署 + +```bash +# 进入前端目录 +cd app + +# 安装依赖 +npm install + +# 设置API地址 +# 编辑 .env.production 文件 +VITE_API_BASE_URL=http://your-api-server:3000/api/v1 +VITE_WS_URL=http://your-api-server:3000/market + +# 构建 +npm run build + +# 部署到Nginx +# 将 dist 目录复制到Nginx的web目录 +``` + +## 环境变量配置 + +### 后端环境变量 (.env) + +```bash +# 应用配置 +NODE_ENV=production +PORT=3000 + +# 数据库 +DATABASE_URL=postgresql://user:password@localhost:5432/futures_analysis + +# Redis +REDIS_URL=redis://localhost:6379 + +# JWT密钥 (生产环境必须修改!) +JWT_SECRET=your-super-secret-key-change-this + +# OpenAI (可选,用于AI分析) +OPENAI_API_KEY=your-openai-key +``` + +### 前端环境变量 (.env.production) + +```bash +VITE_API_BASE_URL=http://api.yourdomain.com/api/v1 +VITE_WS_URL=http://api.yourdomain.com/market +``` + +## API文档 + +启动后端服务后,访问以下地址查看API文档: + +``` +http://localhost:3000/docs +``` + +## 功能清单 + +### ✅ 已实现功能 + +#### 后端功能 +- [x] 用户认证系统 (JWT) +- [x] 行情数据服务 (REST + WebSocket) +- [x] 技术指标计算 (MACD, RSI, KDJ, BOLL, SAR, OBV, DMI, CCI, WR) +- [x] 期权分析模块 (Black-Scholes定价、希腊值、波动率曲面) +- [x] AI智能分析 (支持OpenAI API) +- [x] 热点事件管理 +- [x] 自选股功能 +- [x] 价格预警系统 + +#### 前端功能 +- [x] 市场概览仪表盘 +- [x] 品种筛选和搜索 +- [x] K线图展示 (含MACD、成交量) +- [x] 热点事件分析 +- [x] 风险提醒 + +### 🚧 待实现功能 + +- [ ] 交易信号系统 +- [ ] 量化策略回测 +- [ ] 移动端APP +- [ ] 管理后台 + +## 监控和维护 + +### 查看服务状态 + +```bash +# Docker方式 +docker-compose ps + +# 查看日志 +docker-compose logs -f [service-name] +``` + +### 数据库备份 + +```bash +# Docker方式 +docker-compose exec postgres pg_dump -U futures_user futures_analysis > backup.sql + +# 恢复 +docker-compose exec -T postgres psql -U futures_user futures_analysis < backup.sql +``` + +## 常见问题 + +### 1. 端口冲突 + +编辑 `docker-compose.yml` 修改端口映射: + +```yaml +services: + backend: + ports: + - "3001:3000" # 修改为3001 +``` + +### 2. 数据库连接失败 + +检查 `DATABASE_URL` 是否正确,确保PostgreSQL服务已启动。 + +### 3. 前端无法访问API + +检查前端环境变量 `VITE_API_BASE_URL` 是否正确配置。 + +## 生产环境建议 + +1. **安全** + - 修改默认的JWT密钥 + - 启用HTTPS + - 配置防火墙规则 + +2. **性能** + - 启用Redis缓存 + - 配置CDN加速静态资源 + - 数据库索引优化 + +3. **监控** + - 配置日志收集 (ELK/Loki) + - 设置告警规则 + - 监控API响应时间 + +## 技术栈 + +- **前端**: React 18 + TypeScript + Vite + Tailwind CSS + shadcn/ui +- **后端**: NestJS + TypeScript +- **数据库**: PostgreSQL 15 +- **缓存**: Redis 7 +- **部署**: Docker + Docker Compose diff --git a/PROJECT_SUMMARY.md b/PROJECT_SUMMARY.md new file mode 100644 index 0000000..6f4b75f --- /dev/null +++ b/PROJECT_SUMMARY.md @@ -0,0 +1,255 @@ +# 智能期货期权分析系统 - 功能实现总结 + +## 📋 已完成的功能 + +### 1. 后端服务 (NestJS + TypeScript) + +#### ✅ 基础架构 +- 模块化项目结构,易于扩展 +- 全局异常处理、日志记录 +- API限流保护 +- Swagger API文档自动生成 +- JWT认证与授权 + +#### ✅ 数据库设计 (Prisma) +- 用户系统 +- 期货品种管理 +- K线数据存储 +- 实时Tick数据缓存 +- 热点事件管理 +- 自选股功能 +- 价格预警系统 +- 期权合约管理 + +#### ✅ 用户认证系统 +- 用户注册/登录/登出 +- JWT Token认证 +- 密码加密存储 +- 用户信息管理 + +#### ✅ 行情数据服务 +- RESTful API获取品种列表、K线数据、实时行情 +- WebSocket实时推送Tick数据 +- 市场概览数据聚合 +- Redis缓存加速 + +#### ✅ 技术指标计算引擎 +- MACD (异同移动平均线) +- RSI (相对强弱指标) +- KDJ (随机指标) +- BOLL (布林带) +- SAR (抛物线转向) +- OBV (能量潮) +- DMI (趋向指标) +- CCI (商品通道指数) +- WR (威廉指标) +- 移动平均线 (MA5/MA10/MA20/MA60) + +#### ✅ 期权分析模块 +- Black-Scholes期权定价模型 +- 希腊值计算 (Delta, Gamma, Theta, Vega, Rho) +- 隐含波动率计算 +- 期权链数据生成 +- 波动率曲面分析 +- 期权策略盈亏计算 + +#### ✅ AI智能分析模块 +- 集成OpenAI API进行智能分析 +- 基于规则的技术面分析 (Fallback) +- 趋势判断和交易建议 +- 支撑阻力位计算 +- 风险评估 + +#### ✅ 业务功能 +- 热点事件管理 (增删改查) +- 自选股功能 (增删改查、价格预警) +- 价格预警系统 (定时检查、触发通知) + +### 2. 前端API服务 + +#### ✅ HTTP客户端封装 +- Axios拦截器统一处理 +- Token自动注入 +- 统一错误处理 +- API模块化组织 + +#### ✅ WebSocket客户端 +- Socket.io连接管理 +- 自动重连机制 +- 订阅/取消订阅 +- 事件监听封装 + +### 3. 部署配置 + +#### ✅ Docker支持 +- 前端Dockerfile (Nginx) +- 后端Dockerfile (Node.js) +- Docker Compose编排 +- 健康检查配置 + +#### ✅ 环境配置 +- 环境变量模板 +- 多环境支持 (dev/prod) +- 数据库迁移脚本 +- 种子数据导入 + +## 📁 项目结构 + +``` +AlphaFuturesProMax/ +├── app/ # 前端应用 +│ ├── src/ +│ │ ├── components/ # UI组件 +│ │ ├── services/ # API和WebSocket服务 +│ │ │ ├── api.ts # HTTP API封装 +│ │ │ └── websocket.ts # WebSocket服务 +│ │ └── ... +│ ├── Dockerfile # 前端Docker配置 +│ └── nginx.conf # Nginx配置 +│ +├── app/server/ # 后端服务 +│ ├── src/ +│ │ ├── auth/ # 认证模块 +│ │ ├── market/ # 行情数据模块 +│ │ ├── indicators/ # 技术指标模块 +│ │ ├── options/ # 期权分析模块 +│ │ ├── ai/ # AI分析模块 +│ │ ├── events/ # 热点事件模块 +│ │ ├── watchlist/ # 自选股模块 +│ │ ├── alert/ # 价格预警模块 +│ │ ├── user/ # 用户模块 +│ │ ├── common/ # 公共模块 +│ │ │ ├── prisma/ # Prisma服务 +│ │ │ └── redis/ # Redis服务 +│ │ └── config/ # 配置文件 +│ ├── prisma/ +│ │ ├── schema.prisma # 数据库模型 +│ │ └── seed.ts # 种子数据 +│ ├── Dockerfile # 后端Docker配置 +│ └── package.json +│ +├── docker-compose.yml # Docker编排配置 +├── DEPLOY.md # 部署文档 +└── docs/ # 项目文档 +``` + +## 🚀 快速启动 + +### Docker方式 (推荐) + +```bash +# 1. 启动所有服务 +docker-compose up -d + +# 2. 查看服务状态 +docker-compose ps + +# 3. 查看日志 +docker-compose logs -f backend + +# 4. 访问应用 +# 前端: http://localhost +# API: http://localhost:3000/api/v1 +# 文档: http://localhost:3000/docs +``` + +### 手动部署 + +见 `DEPLOY.md` 详细说明 + +## 📡 API接口 + +### 认证接口 +- `POST /api/v1/auth/register` - 注册 +- `POST /api/v1/auth/login` - 登录 +- `POST /api/v1/auth/logout` - 登出 +- `GET /api/v1/auth/profile` - 获取用户信息 + +### 行情接口 +- `GET /api/v1/market/products` - 品种列表 +- `GET /api/v1/market/products/:symbol` - 品种详情 +- `GET /api/v1/market/products/:symbol/kline` - K线数据 +- `GET /api/v1/market/products/:symbol/tick` - 实时行情 +- `GET /api/v1/market/overview` - 市场概览 + +### 技术指标接口 +- `GET /api/v1/indicators/:symbol` - 所有指标 +- `GET /api/v1/indicators/:symbol/macd` - MACD +- `GET /api/v1/indicators/:symbol/rsi` - RSI +- `GET /api/v1/indicators/:symbol/bollinger` - 布林带 +- `GET /api/v1/indicators/:symbol/kdj` - KDJ + +### 期权接口 +- `POST /api/v1/options/pricing` - 期权定价 +- `GET /api/v1/options/chain/:underlying` - 期权链 +- `GET /api/v1/options/volatility-surface/:underlying` - 波动率曲面 +- `POST /api/v1/options/strategy/payoff` - 策略盈亏 + +### AI分析接口 +- `GET /api/v1/ai/analyze/:symbol` - AI分析品种 + +### 事件接口 +- `GET /api/v1/events` - 热点事件列表 +- `GET /api/v1/events/:id` - 事件详情 + +### WebSocket +- `ws://localhost:3000/market` - 行情实时推送 + +## 🔧 扩展建议 + +### 数据源接入 +目前使用模拟数据,可接入真实数据源: +- Wind金融终端API +- 同花顺iFinD API +- 交易所官方API + +实现方式: +1. 在 `market-data-feed.service.ts` 中实现新的数据源适配器 +2. 修改配置 `MARKET_DATA_PROVIDER` + +### 新增技术指标 +在 `indicators.service.ts` 中添加新的计算方法: +```typescript +calculateNewIndicator(klineData: KLineData[], params: any): Result[] { + // 实现计算逻辑 +} +``` + +### 新增期权模型 +在 `options.service.ts` 中添加新的定价模型: +```typescript +calculateBinomialModel(S: number, K: number, ...): OptionPricingResult { + // 实现二叉树模型 +} +``` + +## 📊 性能优化 + +### 已实现 +- Redis缓存加速 +- WebSocket实时推送 +- API响应压缩 +- 数据库索引优化 + +### 建议优化 +- 数据库读写分离 +- API限流 +- 静态资源CDN +- 应用监控 (Prometheus + Grafana) + +## 🛡️ 安全建议 + +1. 生产环境必须修改JWT密钥 +2. 启用HTTPS +3. 配置CORS白名单 +4. 数据库使用强密码 +5. 定期更新依赖包 + +## 📝 待实现功能 + +- [ ] 交易信号系统 (多指标共振) +- [ ] 量化策略回测引擎 +- [ ] 移动端APP (React Native/Flutter) +- [ ] 管理后台 +- [ ] 会员系统 +- [ ] 模拟交易功能 diff --git a/app/Dockerfile b/app/Dockerfile new file mode 100644 index 0000000..36c5526 --- /dev/null +++ b/app/Dockerfile @@ -0,0 +1,31 @@ +# 前端构建 +FROM node:20-alpine AS builder + +WORKDIR /app + +# 复制package文件 +COPY package*.json ./ + +# 安装依赖 +RUN npm install + +# 复制源代码 +COPY . . + +# 构建生产版本 +RUN npm run build + +# Nginx服务 +FROM nginx:alpine + +# 复制构建产物 +COPY --from=builder /app/dist /usr/share/nginx/html + +# 复制nginx配置 +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# 暴露端口 +EXPOSE 80 + +# 启动nginx +CMD ["nginx", "-g", "daemon off;"] diff --git a/app/README.md b/app/README.md new file mode 100644 index 0000000..d2e7761 --- /dev/null +++ b/app/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/app/components.json b/app/components.json new file mode 100644 index 0000000..411f770 --- /dev/null +++ b/app/components.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "postcss.config.js", + "css": "src/index.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "registries": {} +} diff --git a/app/dist/assets/index-BYX1qVyV.css b/app/dist/assets/index-BYX1qVyV.css new file mode 100644 index 0000000..26d685b --- /dev/null +++ b/app/dist/assets/index-BYX1qVyV.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 240 10% 3.9%;--card: 0 0% 100%;--card-foreground: 240 10% 3.9%;--popover: 0 0% 100%;--popover-foreground: 240 10% 3.9%;--primary: 240 5.9% 10%;--primary-foreground: 0 0% 98%;--secondary: 240 4.8% 95.9%;--secondary-foreground: 240 5.9% 10%;--muted: 240 4.8% 95.9%;--muted-foreground: 240 3.8% 46.1%;--accent: 240 4.8% 95.9%;--accent-foreground: 240 5.9% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 240 5.9% 90%;--input: 240 5.9% 90%;--ring: 240 5.9% 10%;--radius: .625rem;--sidebar-background: 0 0% 98%;--sidebar-foreground: 240 5.3% 26.1%;--sidebar-primary: 240 5.9% 10%;--sidebar-primary-foreground: 0 0% 98%;--sidebar-accent: 240 4.8% 95.9%;--sidebar-accent-foreground: 240 5.9% 10%;--sidebar-border: 220 13% 91%;--sidebar-ring: 217.2 91.2% 59.8%}.dark{--background: 240 10% 3.9%;--foreground: 0 0% 98%;--card: 240 10% 3.9%;--card-foreground: 0 0% 98%;--popover: 240 10% 3.9%;--popover-foreground: 0 0% 98%;--primary: 0 0% 98%;--primary-foreground: 240 5.9% 10%;--secondary: 240 3.7% 15.9%;--secondary-foreground: 0 0% 98%;--muted: 240 3.7% 15.9%;--muted-foreground: 240 5% 64.9%;--accent: 240 3.7% 15.9%;--accent-foreground: 0 0% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 0 0% 98%;--border: 240 3.7% 15.9%;--input: 240 3.7% 15.9%;--ring: 240 4.9% 83.9%;--sidebar-background: 240 5.9% 10%;--sidebar-foreground: 240 4.8% 95.9%;--sidebar-primary: 224.3 76.3% 48%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 240 3.7% 15.9%;--sidebar-accent-foreground: 240 4.8% 95.9%;--sidebar-border: 240 3.7% 15.9%;--sidebar-ring: 217.2 91.2% 59.8%}*{border-color:hsl(var(--border))}body{--tw-bg-opacity: 1;background-color:rgb(9 9 11 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-right-12{right:-3rem}.-top-12{top:-3rem}.bottom-0{bottom:0}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.order-last{order:9999}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2 / span 2}.row-start-1{grid-row-start:1}.\!m-0{margin:0!important}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-auto{margin-top:auto}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-10{width:2.5rem;height:2.5rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1\.15rem\]{height:1.15rem}.h-\[500px\]{height:500px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-\[300px\]{max-height:300px}.min-h-0{min-height:0px}.min-h-16{min-height:4rem}.min-h-4{min-height:1rem}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:0px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-5{width:1.25rem}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[100px\]{width:100px}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-5{min-width:1.25rem}.min-w-8{min-width:2rem}.min-w-9{min-width:2.25rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[200px\]{min-width:200px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-7xl{max-width:80rem}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}}.animate-caret-blink{animation:caret-blink 1.25s ease-out infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.scroll-py-1{scroll-padding-top:.25rem;scroll-padding-bottom:.25rem}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-\[--spacing\(var\(--gap\)\)\]{gap:var(--spacing(var(--gap)))}.gap-y-0\.5{row-gap:.125rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-end{justify-self:end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:calc(var(--radius) - 6px)}.rounded-l-md{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-\[1\.5px\]{border-width:1.5px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[\#27272a\]{--tw-border-opacity: 1;border-color:rgb(39 39 42 / var(--tw-border-opacity, 1))}.border-\[\#27272a\]\/50{border-color:#27272a80}.border-\[\#7dd75a\]{--tw-border-opacity: 1;border-color:rgb(125 215 90 / var(--tw-border-opacity, 1))}.border-\[\#7dd75a\]\/20{border-color:#7dd75a33}.border-\[\#7dd75a\]\/30{border-color:#7dd75a4d}.border-\[\#a1a1aa\]\/30{border-color:#a1a1aa4d}.border-\[\#ef4444\]\/20{border-color:#ef444433}.border-\[\#ef4444\]\/30{border-color:#ef44444d}.border-\[\#f59e0b\]\/20{border-color:#f59e0b33}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#09090b\]{--tw-bg-opacity: 1;background-color:rgb(9 9 11 / var(--tw-bg-opacity, 1))}.bg-\[\#09090b\]\/80{background-color:#09090bcc}.bg-\[\#09090b\]\/95{background-color:#09090bf2}.bg-\[\#0d0d10\]{--tw-bg-opacity: 1;background-color:rgb(13 13 16 / var(--tw-bg-opacity, 1))}.bg-\[\#27272a\]{--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.bg-\[\#3f3f46\]{--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))}.bg-\[\#60a5fa\]\/10{background-color:#60a5fa1a}.bg-\[\#7dd75a\]{--tw-bg-opacity: 1;background-color:rgb(125 215 90 / var(--tw-bg-opacity, 1))}.bg-\[\#7dd75a\]\/10{background-color:#7dd75a1a}.bg-\[\#7dd75a\]\/5{background-color:#7dd75a0d}.bg-\[\#a1a1aa\]\/10{background-color:#a1a1aa1a}.bg-\[\#c084fc\]\/10{background-color:#c084fc1a}.bg-\[\#ef4444\]{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-\[\#ef4444\]\/10{background-color:#ef44441a}.bg-\[\#ef4444\]\/5{background-color:#ef44440d}.bg-\[\#f59e0b\]{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-\[\#f59e0b\]\/10{background-color:#f59e0b1a}.bg-\[\#f59e0b\]\/5{background-color:#f59e0b0d}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-black\/50{background-color:#00000080}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-current{background-color:currentColor}.bg-destructive{--tw-bg-opacity: 1;background-color:hsl(var(--destructive) / var(--tw-bg-opacity, 1))}.bg-foreground{background-color:hsl(var(--foreground))}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.fill-current{fill:currentColor}.fill-foreground{fill:hsl(var(--foreground))}.fill-primary{fill:hsl(var(--primary))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[0\.8rem\]{font-size:.8rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-sm\/relaxed{font-size:.875rem;line-height:1.625}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-tight{letter-spacing:-.025em}.tracking-widest{letter-spacing:.1em}.text-\[\#09090b\]{--tw-text-opacity: 1;color:rgb(9 9 11 / var(--tw-text-opacity, 1))}.text-\[\#60a5fa\]{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-\[\#71717a\]{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.text-\[\#7dd75a\]{--tw-text-opacity: 1;color:rgb(125 215 90 / var(--tw-text-opacity, 1))}.text-\[\#a1a1aa\]{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.text-\[\#c084fc\]{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-\[\#e6e6e6\]{--tw-text-opacity: 1;color:rgb(230 230 230 / var(--tw-text-opacity, 1))}.text-\[\#ef4444\]{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-\[\#f59e0b\]{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-background{color:hsl(var(--background))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xs{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-100{animation-duration:.1s}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.\[--cell-size\:--spacing\(8\)\]{--cell-size: var(--spacing(8))}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:#09090b}::-webkit-scrollbar-thumb{background:#27272a;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#3f3f46}::-moz-selection{background:#7dd75a4d;color:#fff}::selection{background:#7dd75a4d;color:#fff}*:focus-visible{outline:2px solid #7dd75a;outline-offset:2px}html{scroll-behavior:smooth}.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn{animation:fadeIn .5s ease-out forwards}.font-mono{font-family:JetBrains Mono,Fira Code,SF Mono,monospace}.selection\:bg-primary *::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary *::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground *::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground *::selection{color:hsl(var(--primary-foreground))}.selection\:bg-primary::-moz-selection{background-color:hsl(var(--primary))}.selection\:bg-primary::selection{background-color:hsl(var(--primary))}.selection\:text-primary-foreground::-moz-selection{color:hsl(var(--primary-foreground))}.selection\:text-primary-foreground::selection{color:hsl(var(--primary-foreground))}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:1.75rem}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-\[\#71717a\]::-moz-placeholder{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.placeholder\:text-\[\#71717a\]::placeholder{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:.25rem}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-width:1px}.last\:mt-0:last-child{margin-top:0}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-\[\#3f3f46\]:hover{--tw-border-opacity: 1;border-color:rgb(63 63 70 / var(--tw-border-opacity, 1))}.hover\:border-\[\#7dd75a\]\/50:hover{border-color:#7dd75a80}.hover\:border-\[\#ef4444\]\/30:hover{border-color:#ef44444d}.hover\:bg-\[\#27272a\]:hover{--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#3f3f46\]:hover{--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-\[\#7dd75a\]\/5:hover{--tw-shadow-color: rgb(125 215 90 / .05);--tw-shadow: var(--tw-shadow-colored)}.hover\:ring-4:hover{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:z-10:focus{z-index:10}.focus\:border-\[\#7dd75a\]:focus{--tw-border-opacity: 1;border-color:rgb(125 215 90 / var(--tw-border-opacity, 1))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:hsl(var(--ring))}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-4:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color: hsl(var(--destructive) / .2)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color: hsl(var(--ring) / .5)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-\[\#7dd75a\]{--tw-text-opacity: 1;color:rgb(125 215 90 / var(--tw-text-opacity, 1))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100{opacity:1}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.has-\[\>button\]\:ml-\[-0\.45rem\]:has(>button){margin-left:-.45rem}.has-\[\>button\]\:mr-\[-0\.45rem\]:has(>button){margin-right:-.45rem}.has-\[\>kbd\]\:ml-\[-0\.35rem\]:has(>kbd){margin-left:-.35rem}.has-\[\>kbd\]\:mr-\[-0\.35rem\]:has(>kbd){margin-right:-.35rem}.has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.has-\[\>\[data-slot\=field\]\]\:w-full:has(>[data-slot=field]){width:100%}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.has-\[\>\[data-slot\=field\]\]\:flex-col:has(>[data-slot=field]){flex-direction:column}.has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}.has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(>[data-slot=button-group]){gap:.5rem}.has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(>[data-slot=checkbox-group]){gap:.75rem}.has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(>[data-slot=radio-group]){gap:.75rem}.has-\[\>svg\]\:gap-x-3:has(>svg){-moz-column-gap:.75rem;column-gap:.75rem}.has-\[\>\[data-slot\=field\]\]\:rounded-md:has(>[data-slot=field]){border-radius:calc(var(--radius) - 2px)}.has-\[\>\[data-slot\=field\]\]\:border:has(>[data-slot=field]){border-width:1px}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:hsl(var(--ring))}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){--tw-border-opacity: 1;border-color:hsl(var(--destructive) / var(--tw-border-opacity, 1))}.has-\[\>svg\]\:p-0:has(>svg){padding:0}.has-\[\>svg\]\:px-2:has(>svg){padding-left:.5rem;padding-right:.5rem}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-left:.625rem;padding-right:.625rem}.has-\[\>svg\]\:px-3:has(>svg){padding-left:.75rem;padding-right:.75rem}.has-\[\>svg\]\:px-4:has(>svg){padding-left:1rem;padding-right:1rem}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has([data-slot=input-group-control]:focus-visible){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color: hsl(var(--ring) / .5)}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color: hsl(var(--destructive) / .2)}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/item:has([data-slot=item-description]) .group-has-\[\[data-slot\=item-description\]\]\/item\:self-start{align-self:flex-start}.group\/field:has([data-orientation=horizontal]) .group-has-\[\[data-orientation\=horizontal\]\]\/field\:text-balance{text-wrap:balance}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pb-2\.5{padding-bottom:.625rem}.group\/input-group:has(>input) .group-has-\[\>input\]\/input-group\:pt-2\.5{padding-top:.625rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:text-muted-foreground[aria-selected=true]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{left:0;right:0}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{top:0;bottom:0}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{left:0;right:0}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:0}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:0}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:0}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:0}.data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:6rem}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:6rem}.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:.375rem}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=vertical\]\:h-auto[data-orientation=vertical]{height:auto}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[size\=default\]\:h-9[data-size=default]{height:2.25rem}.data-\[size\=sm\]\:h-8[data-size=sm]{height:2rem}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom],.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:11rem}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:.375rem}.data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical],.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[slot\=checkbox-group\]\:gap-3[data-slot=checkbox-group]{gap:.75rem}.data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:calc(var(--radius) - 2px)}.data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:calc(var(--radius) - 2px)}.data-\[selected\=true\]\:rounded-none[data-selected=true],.data-\[spacing\=0\]\:rounded-none[data-spacing="0"]{border-radius:0}.data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:border-l-0[data-variant=outline][data-spacing="0"]{border-left-width:0px}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-width:1px}.data-\[active\=true\]\:border-ring[data-active=true]{border-color:hsl(var(--ring))}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:hsl(var(--primary))}.data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:hsl(var(--accent) / .5)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:hsl(var(--primary))}.data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:hsl(var(--accent))}.data-\[range-start\=true\]\:bg-primary[data-range-start=true],.data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:hsl(var(--primary))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:bg-accent[data-state=on],.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[inset\]\:pl-8[data-inset]{padding-left:2rem}.data-\[variant\=label\]\:text-sm[data-variant=label]{font-size:.875rem;line-height:1.25rem}.data-\[variant\=legend\]\:text-base[data-variant=legend]{font-size:1rem;line-height:1.5rem}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:hsl(var(--accent-foreground))}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[error\=true\]\:text-destructive[data-error=true],.data-\[invalid\=true\]\:text-destructive[data-invalid=true]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:hsl(var(--primary-foreground))}.data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:hsl(var(--accent-foreground))}.data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true],.data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:hsl(var(--primary-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=on\]\:text-accent-foreground[data-state=on],.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[spacing\=0\]\:shadow-none[data-spacing="0"]{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[spacing\=default\]\:data-\[variant\=outline\]\:shadow-xs[data-variant=outline][data-spacing=default],.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color: hsl(var(--ring) / .5)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.\*\:data-\[slot\=select-value\]\:line-clamp-1[data-slot=select-value]>*{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\*\:data-\[slot\=select-value\]\:flex[data-slot=select-value]>*{display:flex}.\*\:data-\[slot\=select-value\]\:items-center[data-slot=select-value]>*{align-items:center}.\*\:data-\[slot\=select-value\]\:gap-2[data-slot=select-value]>*{gap:.5rem}.\*\:data-\[slot\=alert-description\]\:text-destructive\/90[data-slot=alert-description]>*{color:hsl(var(--destructive) / .9)}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:.25rem}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[spacing\=0\]\:first\:rounded-l-md:first-child[data-spacing="0"]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.data-\[spacing\=0\]\:data-\[variant\=outline\]\:first\:border-l:first-child[data-variant=outline][data-spacing="0"]{border-left-width:1px}.data-\[spacing\=0\]\:last\:rounded-r-md:last-child[data-spacing="0"]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.data-\[active\=true\]\:hover\:bg-accent:hover[data-active=true],.data-\[state\=open\]\:hover\:bg-accent:hover[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.data-\[active\=true\]\:focus\:bg-accent:focus[data-active=true]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:focus\:bg-accent:focus[data-state=open]{background-color:hsl(var(--accent))}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10:focus[data-variant=destructive]{background-color:hsl(var(--destructive) / .1)}.data-\[variant\=destructive\]\:focus\:text-destructive:focus[data-variant=destructive]{--tw-text-opacity: 1;color:hsl(var(--destructive) / var(--tw-text-opacity, 1))}.group[data-disabled=true] .group-data-\[disabled\=true\]\:pointer-events-none{pointer-events:none}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:relative{position:relative}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:top-full{top:100%}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:z-10{z-index:10}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group\/field-group[data-variant=outline] .group-data-\[variant\=outline\]\/field-group\:-mb-2{margin-bottom:-.5rem}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5{margin-top:.375rem}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block{display:block}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{width:calc(var(--sidebar-width-icon) + (--spacing(4)) + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180,.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:rounded-md{border-radius:calc(var(--radius) - 2px)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border,.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:border-ring{border-color:hsl(var(--ring))}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:bg-popover{background-color:hsl(var(--popover))}.group\/drawer-content[data-vaul-drawer-direction=bottom] .group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center,.group\/drawer-content[data-vaul-drawer-direction=top] .group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center{text-align:center}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground{color:hsl(var(--popover-foreground))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group\/field[data-disabled=true] .group-data-\[disabled\=true\]\/field\:opacity-50,.group\/input-group[data-disabled=true] .group-data-\[disabled\=true\]\/input-group\:opacity-50,.group[data-disabled=true] .group-data-\[disabled\=true\]\:opacity-50{opacity:.5}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-\[3px\]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.group\/day[data-focused=true] .group-data-\[focused\=true\]\/day\:ring-ring\/50{--tw-ring-color: hsl(var(--ring) / .5)}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:duration-200{transition-duration:.2s;animation-duration:.2s}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.group\/navigation-menu[data-viewport=false] .group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-input:is(.dark *){border-color:hsl(var(--input))}.dark\:bg-destructive\/60:is(.dark *){background-color:hsl(var(--destructive) / .6)}.dark\:bg-input\/30:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:text-muted-foreground:is(.dark *){color:hsl(var(--muted-foreground))}.dark\:hover\:bg-accent\/50:hover:is(.dark *){background-color:hsl(var(--accent) / .5)}.dark\:hover\:bg-input\/50:hover:is(.dark *){background-color:hsl(var(--input) / .5)}.dark\:hover\:text-accent-foreground:hover:is(.dark *){color:hsl(var(--accent-foreground))}.dark\:focus-visible\:ring-destructive\/40:focus-visible:is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:has([data-slot][aria-invalid=true]):is(.dark *){--tw-ring-color: hsl(var(--destructive) / .4)}.dark\:data-\[state\=active\]\:border-input[data-state=active]:is(.dark *){border-color:hsl(var(--input))}.dark\:data-\[state\=active\]\:bg-input\/30[data-state=active]:is(.dark *){background-color:hsl(var(--input) / .3)}.dark\:data-\[state\=checked\]\:bg-primary[data-state=checked]:is(.dark *){background-color:hsl(var(--primary))}.dark\:data-\[state\=checked\]\:bg-primary-foreground[data-state=checked]:is(.dark *){background-color:hsl(var(--primary-foreground))}.dark\:data-\[state\=unchecked\]\:bg-foreground[data-state=unchecked]:is(.dark *){background-color:hsl(var(--foreground))}.dark\:data-\[state\=unchecked\]\:bg-input\/80[data-state=unchecked]:is(.dark *){background-color:hsl(var(--input) / .8)}.dark\:data-\[state\=active\]\:text-foreground[data-state=active]:is(.dark *){color:hsl(var(--foreground))}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:focus[data-variant=destructive]:is(.dark *){background-color:hsl(var(--destructive) / .2)}@media(min-width:640px){.sm\:block{display:block}.sm\:flex{display:flex}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pl-2\.5{padding-left:.625rem}.sm\:pr-2\.5{padding-right:.625rem}.sm\:text-left{text-align:left}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:24rem}}@media(min-width:768px){.md\:absolute{position:absolute}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:gap-1\.5{gap:.375rem}.md\:p-12{padding:3rem}.md\:text-left{text-align:left}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.md\:after\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset][data-state=collapsed]~.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media(min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-md:nth-child(2)[data-selected=true] button{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none>*:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none>*:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:border-l-0>*:not(:first-child){border-left-width:0px}.\[\&\>\*\:not\(\:first-child\)\]\:border-t-0>*:not(:first-child){border-top-width:0px}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none>*:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none>*:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.\[\&\>\*\]\:w-full>*{width:100%}.\[\&\>\*\]\:focus-visible\:relative:focus-visible>*{position:relative}.\[\&\>\*\]\:focus-visible\:z-10:focus-visible>*{z-index:10}.\[\&\>\*\]\:data-\[slot\=field\]\:p-4[data-slot=field]>*{padding:1rem}.\[\&\>\.sr-only\]\:w-auto>.sr-only{width:auto}.\[\&\>\[data-slot\=field-group\]\]\:gap-4>[data-slot=field-group]{gap:1rem}.\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:1 1 auto}.has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md>[data-slot=select-trigger]:last-of-type:has(select[aria-hidden=true]:last-child){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit>[data-slot=select-trigger]:not([class*=w-]){width:-moz-fit-content;width:fit-content}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>a\:hover\]\:text-primary>a:hover{color:hsl(var(--primary))}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>input\]\:flex-1>input{flex:1 1 0%}.has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3>input:has(>[data-align=block-end]){padding-top:.75rem}.has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3>input:has(>[data-align=block-start]){padding-bottom:.75rem}.has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pr-2>input:has(>[data-align=inline-end]){padding-right:.5rem}.has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:pl-2>input:has(>[data-align=inline-start]){padding-left:.5rem}.\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:text-xs>span{font-size:.75rem;line-height:1rem}.\[\&\>span\]\:opacity-70>span{opacity:.7}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5>svg:not([class*=size-]){width:.875rem;height:.875rem}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4>svg:not([class*=size-]){width:1rem;height:1rem}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:.75rem;height:.75rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:h-2\.5>svg{height:.625rem}.\[\&\>svg\]\:h-3>svg{height:.75rem}.\[\&\>svg\]\:w-2\.5>svg{width:.625rem}.\[\&\>svg\]\:w-3>svg{width:.75rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:hsl(var(--muted-foreground))}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:hsl(var(--border) / .5)}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:hsl(var(--border))}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:hsl(var(--muted))}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:transparent}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_img\]\:size-full img{width:100%;height:100%}.\[\&_img\]\:object-cover img{-o-object-fit:cover;object-fit:cover}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:1.5rem;height:1.5rem}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:hsl(var(--muted-foreground))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:transparent}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/20{background-color:hsl(var(--background) / .2)}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:text-background{color:hsl(var(--background))}[data-slot=tooltip-content] .dark\:\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/10:is(.dark *){background-color:hsl(var(--background) / .1)}[data-variant=legend]+.\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5{margin-top:-.375rem}a.\[a\&\]\:hover\:bg-accent:hover{background-color:hsl(var(--accent))}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:hsl(var(--secondary) / .9)}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))} diff --git a/app/dist/assets/index-BYfknKCx.js b/app/dist/assets/index-BYfknKCx.js new file mode 100644 index 0000000..b932aa3 --- /dev/null +++ b/app/dist/assets/index-BYfknKCx.js @@ -0,0 +1,59 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))a(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&a(o)}).observe(document,{childList:!0,subtree:!0});function t(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function a(n){if(n.ep)return;n.ep=!0;const i=t(n);fetch(n.href,i)}})();var U0={exports:{}},Kc={};var vC;function OV(){if(vC)return Kc;vC=1;var r=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function t(a,n,i){var o=null;if(i!==void 0&&(o=""+i),n.key!==void 0&&(o=""+n.key),"key"in n){i={};for(var s in n)s!=="key"&&(i[s]=n[s])}else i=n;return n=i.ref,{$$typeof:r,type:a,key:o,ref:n!==void 0?n:null,props:i}}return Kc.Fragment=e,Kc.jsx=t,Kc.jsxs=t,Kc}var dC;function zV(){return dC||(dC=1,U0.exports=OV()),U0.exports}var z=zV(),F0={exports:{}},Xt={};var pC;function kV(){if(pC)return Xt;pC=1;var r=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),t=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),n=Symbol.for("react.profiler"),i=Symbol.for("react.consumer"),o=Symbol.for("react.context"),s=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),u=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),d=Symbol.iterator;function p(U){return U===null||typeof U!="object"?null:(U=d&&U[d]||U["@@iterator"],typeof U=="function"?U:null)}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,_={};function S(U,W,rt){this.props=U,this.context=W,this.refs=_,this.updater=rt||y}S.prototype.isReactComponent={},S.prototype.setState=function(U,W){if(typeof U!="object"&&typeof U!="function"&&U!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,U,W,"setState")},S.prototype.forceUpdate=function(U){this.updater.enqueueForceUpdate(this,U,"forceUpdate")};function b(){}b.prototype=S.prototype;function w(U,W,rt){this.props=U,this.context=W,this.refs=_,this.updater=rt||y}var A=w.prototype=new b;A.constructor=w,m(A,S.prototype),A.isPureReactComponent=!0;var M=Array.isArray;function C(){}var L={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function R(U,W,rt){var ot=rt.ref;return{$$typeof:r,type:U,key:W,ref:ot!==void 0?ot:null,props:rt}}function N(U,W){return R(U.type,W,U.props)}function O(U){return typeof U=="object"&&U!==null&&U.$$typeof===r}function k(U){var W={"=":"=0",":":"=2"};return"$"+U.replace(/[=:]/g,function(rt){return W[rt]})}var G=/\/+/g;function H(U,W){return typeof U=="object"&&U!==null&&U.key!=null?k(""+U.key):W.toString(36)}function F(U){switch(U.status){case"fulfilled":return U.value;case"rejected":throw U.reason;default:switch(typeof U.status=="string"?U.then(C,C):(U.status="pending",U.then(function(W){U.status==="pending"&&(U.status="fulfilled",U.value=W)},function(W){U.status==="pending"&&(U.status="rejected",U.reason=W)})),U.status){case"fulfilled":return U.value;case"rejected":throw U.reason}}throw U}function B(U,W,rt,ot,ht){var gt=typeof U;(gt==="undefined"||gt==="boolean")&&(U=null);var mt=!1;if(U===null)mt=!0;else switch(gt){case"bigint":case"string":case"number":mt=!0;break;case"object":switch(U.$$typeof){case r:case e:mt=!0;break;case f:return mt=U._init,B(mt(U._payload),W,rt,ot,ht)}}if(mt)return ht=ht(U),mt=ot===""?"."+H(U,0):ot,M(ht)?(rt="",mt!=null&&(rt=mt.replace(G,"$&/")+"/"),B(ht,W,rt,"",function(Lt){return Lt})):ht!=null&&(O(ht)&&(ht=N(ht,rt+(ht.key==null||U&&U.key===ht.key?"":(""+ht.key).replace(G,"$&/")+"/")+mt)),W.push(ht)),1;mt=0;var yt=ot===""?".":ot+":";if(M(U))for(var St=0;St>>1,nt=B[K];if(0>>1;Kn(rt,Y))otn(ht,rt)?(B[K]=ht,B[ot]=Y,K=ot):(B[K]=rt,B[W]=Y,K=W);else if(otn(ht,Y))B[K]=ht,B[ot]=Y,K=ot;else break t}}return j}function n(B,j){var Y=B.sortIndex-j.sortIndex;return Y!==0?Y:B.id-j.id}if(r.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var i=performance;r.unstable_now=function(){return i.now()}}else{var o=Date,s=o.now();r.unstable_now=function(){return o.now()-s}}var l=[],u=[],f=1,v=null,d=3,p=!1,y=!1,m=!1,_=!1,S=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;function A(B){for(var j=t(u);j!==null;){if(j.callback===null)a(u);else if(j.startTime<=B)a(u),j.sortIndex=j.expirationTime,e(l,j);else break;j=t(u)}}function M(B){if(m=!1,A(B),!y)if(t(l)!==null)y=!0,C||(C=!0,k());else{var j=t(u);j!==null&&F(M,j.startTime-B)}}var C=!1,L=-1,E=5,R=-1;function N(){return _?!0:!(r.unstable_now()-RB&&N());){var K=v.callback;if(typeof K=="function"){v.callback=null,d=v.priorityLevel;var nt=K(v.expirationTime<=B);if(B=r.unstable_now(),typeof nt=="function"){v.callback=nt,A(B),j=!0;break e}v===t(l)&&a(l),A(B)}else a(l);v=t(l)}if(v!==null)j=!0;else{var U=t(u);U!==null&&F(M,U.startTime-B),j=!1}}break t}finally{v=null,d=Y,p=!1}j=void 0}}finally{j?k():C=!1}}}var k;if(typeof w=="function")k=function(){w(O)};else if(typeof MessageChannel<"u"){var G=new MessageChannel,H=G.port2;G.port1.onmessage=O,k=function(){H.postMessage(null)}}else k=function(){S(O,0)};function F(B,j){L=S(function(){B(r.unstable_now())},j)}r.unstable_IdlePriority=5,r.unstable_ImmediatePriority=1,r.unstable_LowPriority=4,r.unstable_NormalPriority=3,r.unstable_Profiling=null,r.unstable_UserBlockingPriority=2,r.unstable_cancelCallback=function(B){B.callback=null},r.unstable_forceFrameRate=function(B){0>B||125K?(B.sortIndex=Y,e(u,B),t(l)===null&&B===t(u)&&(m?(b(L),L=-1):m=!0,F(M,Y-K))):(B.sortIndex=nt,e(l,B),y||p||(y=!0,C||(C=!0,k()))),B},r.unstable_shouldYield=N,r.unstable_wrapCallback=function(B){var j=d;return function(){var Y=d;d=j;try{return B.apply(this,arguments)}finally{d=Y}}}})(X0)),X0}var mC;function VV(){return mC||(mC=1,Y0.exports=BV()),Y0.exports}var Z0={exports:{}},br={};var _C;function GV(){if(_C)return br;_C=1;var r=lb();function e(l){var u="https://react.dev/errors/"+l;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(e){console.error(e)}}return r(),Z0.exports=GV(),Z0.exports}var SC;function UV(){if(SC)return Qc;SC=1;var r=VV(),e=lb(),t=HV();function a(c){var h="https://react.dev/errors/"+c;if(1nt||(c.current=K[nt],K[nt]=null,nt--)}function rt(c,h){nt++,K[nt]=c.current,c.current=h}var ot=U(null),ht=U(null),gt=U(null),mt=U(null);function yt(c,h){switch(rt(gt,h),rt(ht,c),rt(ot,null),h.nodeType){case 9:case 11:c=(c=h.documentElement)&&(c=c.namespaceURI)?zD(c):0;break;default:if(c=h.tagName,h=h.namespaceURI)h=zD(h),c=kD(h,c);else switch(c){case"svg":c=1;break;case"math":c=2;break;default:c=0}}W(ot),rt(ot,c)}function St(){W(ot),W(ht),W(gt)}function Lt(c){c.memoizedState!==null&&rt(mt,c);var h=ot.current,g=kD(h,c.type);h!==g&&(rt(ht,c),rt(ot,g))}function _t(c){ht.current===c&&(W(ot),W(ht)),mt.current===c&&(W(mt),Zc._currentValue=Y)}var Et,ge;function Gt(c){if(Et===void 0)try{throw Error()}catch(g){var h=g.stack.trim().match(/\n( *(at )?)/);Et=h&&h[1]||"",ge=-1)":-1T||X[x]!==J[T]){var lt=` +`+X[x].replace(" at new "," at ");return c.displayName&<.includes("")&&(lt=lt.replace("",c.displayName)),lt}while(1<=x&&0<=T);break}}}finally{Ce=!1,Error.prepareStackTrace=g}return(g=c?c.displayName||c.name:"")?Gt(g):""}function or(c,h){switch(c.tag){case 26:case 27:case 5:return Gt(c.type);case 16:return Gt("Lazy");case 13:return c.child!==h&&h!==null?Gt("Suspense Fallback"):Gt("Suspense");case 19:return Gt("SuspenseList");case 0:case 15:return be(c.type,!1);case 11:return be(c.type.render,!1);case 1:return be(c.type,!0);case 31:return Gt("Activity");default:return""}}function pa(c){try{var h="",g=null;do h+=or(c,g),g=c,c=c.return;while(c);return h}catch(x){return` +Error generating stack: `+x.message+` +`+x.stack}}var sr=Object.prototype.hasOwnProperty,Ci=r.unstable_scheduleCallback,ga=r.unstable_cancelCallback,ev=r.unstable_shouldYield,nc=r.unstable_requestPaint,Jr=r.unstable_now,pB=r.unstable_getCurrentPriorityLevel,dw=r.unstable_ImmediatePriority,pw=r.unstable_UserBlockingPriority,rv=r.unstable_NormalPriority,gB=r.unstable_LowPriority,gw=r.unstable_IdlePriority,yB=r.log,mB=r.unstable_setDisableYieldValue,ic=null,ta=null;function Mi(c){if(typeof yB=="function"&&mB(c),ta&&typeof ta.setStrictMode=="function")try{ta.setStrictMode(ic,c)}catch{}}var ea=Math.clz32?Math.clz32:SB,_B=Math.log,xB=Math.LN2;function SB(c){return c>>>=0,c===0?32:31-(_B(c)/xB|0)|0}var av=256,nv=262144,iv=4194304;function ko(c){var h=c&42;if(h!==0)return h;switch(c&-c){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return c&261888;case 262144:case 524288:case 1048576:case 2097152:return c&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return c&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return c}}function ov(c,h,g){var x=c.pendingLanes;if(x===0)return 0;var T=0,D=c.suspendedLanes,I=c.pingedLanes;c=c.warmLanes;var V=x&134217727;return V!==0?(x=V&~D,x!==0?T=ko(x):(I&=V,I!==0?T=ko(I):g||(g=V&~c,g!==0&&(T=ko(g))))):(V=x&~D,V!==0?T=ko(V):I!==0?T=ko(I):g||(g=x&~c,g!==0&&(T=ko(g)))),T===0?0:h!==0&&h!==T&&(h&D)===0&&(D=T&-T,g=h&-h,D>=g||D===32&&(g&4194048)!==0)?h:T}function oc(c,h){return(c.pendingLanes&~(c.suspendedLanes&~c.pingedLanes)&h)===0}function bB(c,h){switch(c){case 1:case 2:case 4:case 8:case 64:return h+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return h+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function yw(){var c=iv;return iv<<=1,(iv&62914560)===0&&(iv=4194304),c}function Ey(c){for(var h=[],g=0;31>g;g++)h.push(c);return h}function sc(c,h){c.pendingLanes|=h,h!==268435456&&(c.suspendedLanes=0,c.pingedLanes=0,c.warmLanes=0)}function wB(c,h,g,x,T,D){var I=c.pendingLanes;c.pendingLanes=g,c.suspendedLanes=0,c.pingedLanes=0,c.warmLanes=0,c.expiredLanes&=g,c.entangledLanes&=g,c.errorRecoveryDisabledLanes&=g,c.shellSuspendCounter=0;var V=c.entanglements,X=c.expirationTimes,J=c.hiddenUpdates;for(g=I&~g;0"u")return null;try{return c.activeElement||c.body}catch{return c.body}}var LB=/[\n"\\]/g;function ma(c){return c.replace(LB,function(h){return"\\"+h.charCodeAt(0).toString(16)+" "})}function zy(c,h,g,x,T,D,I,V){c.name="",I!=null&&typeof I!="function"&&typeof I!="symbol"&&typeof I!="boolean"?c.type=I:c.removeAttribute("type"),h!=null?I==="number"?(h===0&&c.value===""||c.value!=h)&&(c.value=""+ya(h)):c.value!==""+ya(h)&&(c.value=""+ya(h)):I!=="submit"&&I!=="reset"||c.removeAttribute("value"),h!=null?ky(c,I,ya(h)):g!=null?ky(c,I,ya(g)):x!=null&&c.removeAttribute("value"),T==null&&D!=null&&(c.defaultChecked=!!D),T!=null&&(c.checked=T&&typeof T!="function"&&typeof T!="symbol"),V!=null&&typeof V!="function"&&typeof V!="symbol"&&typeof V!="boolean"?c.name=""+ya(V):c.removeAttribute("name")}function Ew(c,h,g,x,T,D,I,V){if(D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"&&(c.type=D),h!=null||g!=null){if(!(D!=="submit"&&D!=="reset"||h!=null)){Oy(c);return}g=g!=null?""+ya(g):"",h=h!=null?""+ya(h):g,V||h===c.value||(c.value=h),c.defaultValue=h}x=x??T,x=typeof x!="function"&&typeof x!="symbol"&&!!x,c.checked=V?c.checked:!!x,c.defaultChecked=!!x,I!=null&&typeof I!="function"&&typeof I!="symbol"&&typeof I!="boolean"&&(c.name=I),Oy(c)}function ky(c,h,g){h==="number"&&uv(c.ownerDocument)===c||c.defaultValue===""+g||(c.defaultValue=""+g)}function ml(c,h,g,x){if(c=c.options,h){h={};for(var T=0;T"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Uy=!1;if(Fn)try{var fc={};Object.defineProperty(fc,"passive",{get:function(){Uy=!0}}),window.addEventListener("test",fc,fc),window.removeEventListener("test",fc,fc)}catch{Uy=!1}var Ei=null,Fy=null,fv=null;function kw(){if(fv)return fv;var c,h=Fy,g=h.length,x,T="value"in Ei?Ei.value:Ei.textContent,D=T.length;for(c=0;c=dc),Fw=" ",jw=!1;function Yw(c,h){switch(c){case"keyup":return a7.indexOf(h.keyCode)!==-1;case"keydown":return h.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Xw(c){return c=c.detail,typeof c=="object"&&"data"in c?c.data:null}var bl=!1;function i7(c,h){switch(c){case"compositionend":return Xw(h);case"keypress":return h.which!==32?null:(jw=!0,Fw);case"textInput":return c=h.data,c===Fw&&jw?null:c;default:return null}}function o7(c,h){if(bl)return c==="compositionend"||!Wy&&Yw(c,h)?(c=kw(),fv=Fy=Ei=null,bl=!1,c):null;switch(c){case"paste":return null;case"keypress":if(!(h.ctrlKey||h.altKey||h.metaKey)||h.ctrlKey&&h.altKey){if(h.char&&1=h)return{node:g,offset:h-c};c=x}t:{for(;g;){if(g.nextSibling){g=g.nextSibling;break t}g=g.parentNode}g=void 0}g=tT(g)}}function rT(c,h){return c&&h?c===h?!0:c&&c.nodeType===3?!1:h&&h.nodeType===3?rT(c,h.parentNode):"contains"in c?c.contains(h):c.compareDocumentPosition?!!(c.compareDocumentPosition(h)&16):!1:!1}function aT(c){c=c!=null&&c.ownerDocument!=null&&c.ownerDocument.defaultView!=null?c.ownerDocument.defaultView:window;for(var h=uv(c.document);h instanceof c.HTMLIFrameElement;){try{var g=typeof h.contentWindow.location.href=="string"}catch{g=!1}if(g)c=h.contentWindow;else break;h=uv(c.document)}return h}function Ky(c){var h=c&&c.nodeName&&c.nodeName.toLowerCase();return h&&(h==="input"&&(c.type==="text"||c.type==="search"||c.type==="tel"||c.type==="url"||c.type==="password")||h==="textarea"||c.contentEditable==="true")}var d7=Fn&&"documentMode"in document&&11>=document.documentMode,wl=null,Qy=null,mc=null,Jy=!1;function nT(c,h,g){var x=g.window===g?g.document:g.nodeType===9?g:g.ownerDocument;Jy||wl==null||wl!==uv(x)||(x=wl,"selectionStart"in x&&Ky(x)?x={start:x.selectionStart,end:x.selectionEnd}:(x=(x.ownerDocument&&x.ownerDocument.defaultView||window).getSelection(),x={anchorNode:x.anchorNode,anchorOffset:x.anchorOffset,focusNode:x.focusNode,focusOffset:x.focusOffset}),mc&&yc(mc,x)||(mc=x,x=nd(Qy,"onSelect"),0>=I,T-=I,vn=1<<32-ea(h)+T|g<qt?(ae=Mt,Mt=null):ae=Mt.sibling;var ce=tt(q,Mt,Q[qt],ut);if(ce===null){Mt===null&&(Mt=ae);break}c&&Mt&&ce.alternate===null&&h(q,Mt),Z=D(ce,Z,qt),ue===null?Nt=ce:ue.sibling=ce,ue=ce,Mt=ae}if(qt===Q.length)return g(q,Mt),ie&&Yn(q,qt),Nt;if(Mt===null){for(;qtqt?(ae=Mt,Mt=null):ae=Mt.sibling;var Qi=tt(q,Mt,ce.value,ut);if(Qi===null){Mt===null&&(Mt=ae);break}c&&Mt&&Qi.alternate===null&&h(q,Mt),Z=D(Qi,Z,qt),ue===null?Nt=Qi:ue.sibling=Qi,ue=Qi,Mt=ae}if(ce.done)return g(q,Mt),ie&&Yn(q,qt),Nt;if(Mt===null){for(;!ce.done;qt++,ce=Q.next())ce=ct(q,ce.value,ut),ce!==null&&(Z=D(ce,Z,qt),ue===null?Nt=ce:ue.sibling=ce,ue=ce);return ie&&Yn(q,qt),Nt}for(Mt=x(Mt);!ce.done;qt++,ce=Q.next())ce=at(Mt,q,qt,ce.value,ut),ce!==null&&(c&&ce.alternate!==null&&Mt.delete(ce.key===null?qt:ce.key),Z=D(ce,Z,qt),ue===null?Nt=ce:ue.sibling=ce,ue=ce);return c&&Mt.forEach(function(PV){return h(q,PV)}),ie&&Yn(q,qt),Nt}function Ae(q,Z,Q,ut){if(typeof Q=="object"&&Q!==null&&Q.type===m&&Q.key===null&&(Q=Q.props.children),typeof Q=="object"&&Q!==null){switch(Q.$$typeof){case p:t:{for(var Nt=Q.key;Z!==null;){if(Z.key===Nt){if(Nt=Q.type,Nt===m){if(Z.tag===7){g(q,Z.sibling),ut=T(Z,Q.props.children),ut.return=q,q=ut;break t}}else if(Z.elementType===Nt||typeof Nt=="object"&&Nt!==null&&Nt.$$typeof===E&&Wo(Nt)===Z.type){g(q,Z.sibling),ut=T(Z,Q.props),Tc(ut,Q),ut.return=q,q=ut;break t}g(q,Z);break}else h(q,Z);Z=Z.sibling}Q.type===m?(ut=Fo(Q.props.children,q.mode,ut,Q.key),ut.return=q,q=ut):(ut=Sv(Q.type,Q.key,Q.props,null,q.mode,ut),Tc(ut,Q),ut.return=q,q=ut)}return I(q);case y:t:{for(Nt=Q.key;Z!==null;){if(Z.key===Nt)if(Z.tag===4&&Z.stateNode.containerInfo===Q.containerInfo&&Z.stateNode.implementation===Q.implementation){g(q,Z.sibling),ut=T(Z,Q.children||[]),ut.return=q,q=ut;break t}else{g(q,Z);break}else h(q,Z);Z=Z.sibling}ut=om(Q,q.mode,ut),ut.return=q,q=ut}return I(q);case E:return Q=Wo(Q),Ae(q,Z,Q,ut)}if(F(Q))return At(q,Z,Q,ut);if(k(Q)){if(Nt=k(Q),typeof Nt!="function")throw Error(a(150));return Q=Nt.call(Q),Bt(q,Z,Q,ut)}if(typeof Q.then=="function")return Ae(q,Z,Mv(Q),ut);if(Q.$$typeof===w)return Ae(q,Z,Tv(q,Q),ut);Lv(q,Q)}return typeof Q=="string"&&Q!==""||typeof Q=="number"||typeof Q=="bigint"?(Q=""+Q,Z!==null&&Z.tag===6?(g(q,Z.sibling),ut=T(Z,Q),ut.return=q,q=ut):(g(q,Z),ut=im(Q,q.mode,ut),ut.return=q,q=ut),I(q)):g(q,Z)}return function(q,Z,Q,ut){try{wc=0;var Nt=Ae(q,Z,Q,ut);return Pl=null,Nt}catch(Mt){if(Mt===Nl||Mt===Dv)throw Mt;var ue=aa(29,Mt,null,q.mode);return ue.lanes=ut,ue.return=q,ue}}}var $o=CT(!0),MT=CT(!1),Oi=!1;function mm(c){c.updateQueue={baseState:c.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function _m(c,h){c=c.updateQueue,h.updateQueue===c&&(h.updateQueue={baseState:c.baseState,firstBaseUpdate:c.firstBaseUpdate,lastBaseUpdate:c.lastBaseUpdate,shared:c.shared,callbacks:null})}function zi(c){return{lane:c,tag:0,payload:null,callback:null,next:null}}function ki(c,h,g){var x=c.updateQueue;if(x===null)return null;if(x=x.shared,(ve&2)!==0){var T=x.pending;return T===null?h.next=h:(h.next=T.next,T.next=h),x.pending=h,h=xv(c),fT(c,null,g),h}return _v(c,x,h,g),xv(c)}function Ac(c,h,g){if(h=h.updateQueue,h!==null&&(h=h.shared,(g&4194048)!==0)){var x=h.lanes;x&=c.pendingLanes,g|=x,h.lanes=g,_w(c,g)}}function xm(c,h){var g=c.updateQueue,x=c.alternate;if(x!==null&&(x=x.updateQueue,g===x)){var T=null,D=null;if(g=g.firstBaseUpdate,g!==null){do{var I={lane:g.lane,tag:g.tag,payload:g.payload,callback:null,next:null};D===null?T=D=I:D=D.next=I,g=g.next}while(g!==null);D===null?T=D=h:D=D.next=h}else T=D=h;g={baseState:x.baseState,firstBaseUpdate:T,lastBaseUpdate:D,shared:x.shared,callbacks:x.callbacks},c.updateQueue=g;return}c=g.lastBaseUpdate,c===null?g.firstBaseUpdate=h:c.next=h,g.lastBaseUpdate=h}var Sm=!1;function Dc(){if(Sm){var c=Il;if(c!==null)throw c}}function Cc(c,h,g,x){Sm=!1;var T=c.updateQueue;Oi=!1;var D=T.firstBaseUpdate,I=T.lastBaseUpdate,V=T.shared.pending;if(V!==null){T.shared.pending=null;var X=V,J=X.next;X.next=null,I===null?D=J:I.next=J,I=X;var lt=c.alternate;lt!==null&&(lt=lt.updateQueue,V=lt.lastBaseUpdate,V!==I&&(V===null?lt.firstBaseUpdate=J:V.next=J,lt.lastBaseUpdate=X))}if(D!==null){var ct=T.baseState;I=0,lt=J=X=null,V=D;do{var tt=V.lane&-536870913,at=tt!==V.lane;if(at?(re&tt)===tt:(x&tt)===tt){tt!==0&&tt===Rl&&(Sm=!0),lt!==null&&(lt=lt.next={lane:0,tag:V.tag,payload:V.payload,callback:null,next:null});t:{var At=c,Bt=V;tt=h;var Ae=g;switch(Bt.tag){case 1:if(At=Bt.payload,typeof At=="function"){ct=At.call(Ae,ct,tt);break t}ct=At;break t;case 3:At.flags=At.flags&-65537|128;case 0:if(At=Bt.payload,tt=typeof At=="function"?At.call(Ae,ct,tt):At,tt==null)break t;ct=v({},ct,tt);break t;case 2:Oi=!0}}tt=V.callback,tt!==null&&(c.flags|=64,at&&(c.flags|=8192),at=T.callbacks,at===null?T.callbacks=[tt]:at.push(tt))}else at={lane:tt,tag:V.tag,payload:V.payload,callback:V.callback,next:null},lt===null?(J=lt=at,X=ct):lt=lt.next=at,I|=tt;if(V=V.next,V===null){if(V=T.shared.pending,V===null)break;at=V,V=at.next,at.next=null,T.lastBaseUpdate=at,T.shared.pending=null}}while(!0);lt===null&&(X=ct),T.baseState=X,T.firstBaseUpdate=J,T.lastBaseUpdate=lt,D===null&&(T.shared.lanes=0),Ui|=I,c.lanes=I,c.memoizedState=ct}}function LT(c,h){if(typeof c!="function")throw Error(a(191,c));c.call(h)}function ET(c,h){var g=c.callbacks;if(g!==null)for(c.callbacks=null,c=0;cD?D:8;var I=B.T,V={};B.T=V,Gm(c,!1,h,g);try{var X=T(),J=B.S;if(J!==null&&J(V,X),X!==null&&typeof X=="object"&&typeof X.then=="function"){var lt=w7(X,x);Ec(c,h,lt,la(c))}else Ec(c,h,x,la(c))}catch(ct){Ec(c,h,{then:function(){},status:"rejected",reason:ct},la())}finally{j.p=D,I!==null&&V.types!==null&&(I.types=V.types),B.T=I}}function L7(){}function Bm(c,h,g,x){if(c.tag!==5)throw Error(a(476));var T=lA(c).queue;sA(c,T,h,Y,g===null?L7:function(){return uA(c),g(x)})}function lA(c){var h=c.memoizedState;if(h!==null)return h;h={memoizedState:Y,baseState:Y,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:qn,lastRenderedState:Y},next:null};var g={};return h.next={memoizedState:g,baseState:g,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:qn,lastRenderedState:g},next:null},c.memoizedState=h,c=c.alternate,c!==null&&(c.memoizedState=h),h}function uA(c){var h=lA(c);h.next===null&&(h=c.alternate.memoizedState),Ec(c,h.next.queue,{},la())}function Vm(){return pr(Zc)}function cA(){return Ue().memoizedState}function fA(){return Ue().memoizedState}function E7(c){for(var h=c.return;h!==null;){switch(h.tag){case 24:case 3:var g=la();c=zi(g);var x=ki(h,c,g);x!==null&&(Zr(x,h,g),Ac(x,h,g)),h={cache:dm()},c.payload=h;return}h=h.return}}function R7(c,h,g){var x=la();g={lane:x,revertLane:0,gesture:null,action:g,hasEagerState:!1,eagerState:null,next:null},Vv(c)?vA(h,g):(g=am(c,h,g,x),g!==null&&(Zr(g,c,x),dA(g,h,x)))}function hA(c,h,g){var x=la();Ec(c,h,g,x)}function Ec(c,h,g,x){var T={lane:x,revertLane:0,gesture:null,action:g,hasEagerState:!1,eagerState:null,next:null};if(Vv(c))vA(h,T);else{var D=c.alternate;if(c.lanes===0&&(D===null||D.lanes===0)&&(D=h.lastRenderedReducer,D!==null))try{var I=h.lastRenderedState,V=D(I,g);if(T.hasEagerState=!0,T.eagerState=V,ra(V,I))return _v(c,h,T,0),Me===null&&mv(),!1}catch{}if(g=am(c,h,T,x),g!==null)return Zr(g,c,x),dA(g,h,x),!0}return!1}function Gm(c,h,g,x){if(x={lane:2,revertLane:m0(),gesture:null,action:x,hasEagerState:!1,eagerState:null,next:null},Vv(c)){if(h)throw Error(a(479))}else h=am(c,g,x,2),h!==null&&Zr(h,c,2)}function Vv(c){var h=c.alternate;return c===Zt||h!==null&&h===Zt}function vA(c,h){zl=Iv=!0;var g=c.pending;g===null?h.next=h:(h.next=g.next,g.next=h),c.pending=h}function dA(c,h,g){if((g&4194048)!==0){var x=h.lanes;x&=c.pendingLanes,g|=x,h.lanes=g,_w(c,g)}}var Rc={readContext:pr,use:Ov,useCallback:ke,useContext:ke,useEffect:ke,useImperativeHandle:ke,useLayoutEffect:ke,useInsertionEffect:ke,useMemo:ke,useReducer:ke,useRef:ke,useState:ke,useDebugValue:ke,useDeferredValue:ke,useTransition:ke,useSyncExternalStore:ke,useId:ke,useHostTransitionStatus:ke,useFormState:ke,useActionState:ke,useOptimistic:ke,useMemoCache:ke,useCacheRefresh:ke};Rc.useEffectEvent=ke;var pA={readContext:pr,use:Ov,useCallback:function(c,h){return Mr().memoizedState=[c,h===void 0?null:h],c},useContext:pr,useEffect:QT,useImperativeHandle:function(c,h,g){g=g!=null?g.concat([c]):null,kv(4194308,4,rA.bind(null,h,c),g)},useLayoutEffect:function(c,h){return kv(4194308,4,c,h)},useInsertionEffect:function(c,h){kv(4,2,c,h)},useMemo:function(c,h){var g=Mr();h=h===void 0?null:h;var x=c();if(Ko){Mi(!0);try{c()}finally{Mi(!1)}}return g.memoizedState=[x,h],x},useReducer:function(c,h,g){var x=Mr();if(g!==void 0){var T=g(h);if(Ko){Mi(!0);try{g(h)}finally{Mi(!1)}}}else T=h;return x.memoizedState=x.baseState=T,c={pending:null,lanes:0,dispatch:null,lastRenderedReducer:c,lastRenderedState:T},x.queue=c,c=c.dispatch=R7.bind(null,Zt,c),[x.memoizedState,c]},useRef:function(c){var h=Mr();return c={current:c},h.memoizedState=c},useState:function(c){c=Nm(c);var h=c.queue,g=hA.bind(null,Zt,h);return h.dispatch=g,[c.memoizedState,g]},useDebugValue:zm,useDeferredValue:function(c,h){var g=Mr();return km(g,c,h)},useTransition:function(){var c=Nm(!1);return c=sA.bind(null,Zt,c.queue,!0,!1),Mr().memoizedState=c,[!1,c]},useSyncExternalStore:function(c,h,g){var x=Zt,T=Mr();if(ie){if(g===void 0)throw Error(a(407));g=g()}else{if(g=h(),Me===null)throw Error(a(349));(re&127)!==0||zT(x,h,g)}T.memoizedState=g;var D={value:g,getSnapshot:h};return T.queue=D,QT(BT.bind(null,x,D,c),[c]),x.flags|=2048,Bl(9,{destroy:void 0},kT.bind(null,x,D,g,h),null),g},useId:function(){var c=Mr(),h=Me.identifierPrefix;if(ie){var g=dn,x=vn;g=(x&~(1<<32-ea(x)-1)).toString(32)+g,h="_"+h+"R_"+g,g=Nv++,0<\/script>",D=D.removeChild(D.firstChild);break;case"select":D=typeof x.is=="string"?I.createElement("select",{is:x.is}):I.createElement("select"),x.multiple?D.multiple=!0:x.size&&(D.size=x.size);break;default:D=typeof x.is=="string"?I.createElement(T,{is:x.is}):I.createElement(T)}}D[vr]=h,D[Hr]=x;t:for(I=h.child;I!==null;){if(I.tag===5||I.tag===6)D.appendChild(I.stateNode);else if(I.tag!==4&&I.tag!==27&&I.child!==null){I.child.return=I,I=I.child;continue}if(I===h)break t;for(;I.sibling===null;){if(I.return===null||I.return===h)break t;I=I.return}I.sibling.return=I.return,I=I.sibling}h.stateNode=D;t:switch(yr(D,T,x),T){case"button":case"input":case"select":case"textarea":x=!!x.autoFocus;break t;case"img":x=!0;break t;default:x=!1}x&&Kn(h)}}return Ie(h),t0(h,h.type,c===null?null:c.memoizedProps,h.pendingProps,g),null;case 6:if(c&&h.stateNode!=null)c.memoizedProps!==x&&Kn(h);else{if(typeof x!="string"&&h.stateNode===null)throw Error(a(166));if(c=gt.current,Ll(h)){if(c=h.stateNode,g=h.memoizedProps,x=null,T=dr,T!==null)switch(T.tag){case 27:case 5:x=T.memoizedProps}c[vr]=h,c=!!(c.nodeValue===g||x!==null&&x.suppressHydrationWarning===!0||PD(c.nodeValue,g)),c||Ni(h,!0)}else c=id(c).createTextNode(x),c[vr]=h,h.stateNode=c}return Ie(h),null;case 31:if(g=h.memoizedState,c===null||c.memoizedState!==null){if(x=Ll(h),g!==null){if(c===null){if(!x)throw Error(a(318));if(c=h.memoizedState,c=c!==null?c.dehydrated:null,!c)throw Error(a(557));c[vr]=h}else jo(),(h.flags&128)===0&&(h.memoizedState=null),h.flags|=4;Ie(h),c=!1}else g=cm(),c!==null&&c.memoizedState!==null&&(c.memoizedState.hydrationErrors=g),c=!0;if(!c)return h.flags&256?(ia(h),h):(ia(h),null);if((h.flags&128)!==0)throw Error(a(558))}return Ie(h),null;case 13:if(x=h.memoizedState,c===null||c.memoizedState!==null&&c.memoizedState.dehydrated!==null){if(T=Ll(h),x!==null&&x.dehydrated!==null){if(c===null){if(!T)throw Error(a(318));if(T=h.memoizedState,T=T!==null?T.dehydrated:null,!T)throw Error(a(317));T[vr]=h}else jo(),(h.flags&128)===0&&(h.memoizedState=null),h.flags|=4;Ie(h),T=!1}else T=cm(),c!==null&&c.memoizedState!==null&&(c.memoizedState.hydrationErrors=T),T=!0;if(!T)return h.flags&256?(ia(h),h):(ia(h),null)}return ia(h),(h.flags&128)!==0?(h.lanes=g,h):(g=x!==null,c=c!==null&&c.memoizedState!==null,g&&(x=h.child,T=null,x.alternate!==null&&x.alternate.memoizedState!==null&&x.alternate.memoizedState.cachePool!==null&&(T=x.alternate.memoizedState.cachePool.pool),D=null,x.memoizedState!==null&&x.memoizedState.cachePool!==null&&(D=x.memoizedState.cachePool.pool),D!==T&&(x.flags|=2048)),g!==c&&g&&(h.child.flags|=8192),jv(h,h.updateQueue),Ie(h),null);case 4:return St(),c===null&&b0(h.stateNode.containerInfo),Ie(h),null;case 10:return Zn(h.type),Ie(h),null;case 19:if(W(He),x=h.memoizedState,x===null)return Ie(h),null;if(T=(h.flags&128)!==0,D=x.rendering,D===null)if(T)Nc(x,!1);else{if(Be!==0||c!==null&&(c.flags&128)!==0)for(c=h.child;c!==null;){if(D=Rv(c),D!==null){for(h.flags|=128,Nc(x,!1),c=D.updateQueue,h.updateQueue=c,jv(h,c),h.subtreeFlags=0,c=g,g=h.child;g!==null;)hT(g,c),g=g.sibling;return rt(He,He.current&1|2),ie&&Yn(h,x.treeForkCount),h.child}c=c.sibling}x.tail!==null&&Jr()>qv&&(h.flags|=128,T=!0,Nc(x,!1),h.lanes=4194304)}else{if(!T)if(c=Rv(D),c!==null){if(h.flags|=128,T=!0,c=c.updateQueue,h.updateQueue=c,jv(h,c),Nc(x,!0),x.tail===null&&x.tailMode==="hidden"&&!D.alternate&&!ie)return Ie(h),null}else 2*Jr()-x.renderingStartTime>qv&&g!==536870912&&(h.flags|=128,T=!0,Nc(x,!1),h.lanes=4194304);x.isBackwards?(D.sibling=h.child,h.child=D):(c=x.last,c!==null?c.sibling=D:h.child=D,x.last=D)}return x.tail!==null?(c=x.tail,x.rendering=c,x.tail=c.sibling,x.renderingStartTime=Jr(),c.sibling=null,g=He.current,rt(He,T?g&1|2:g&1),ie&&Yn(h,x.treeForkCount),c):(Ie(h),null);case 22:case 23:return ia(h),wm(),x=h.memoizedState!==null,c!==null?c.memoizedState!==null!==x&&(h.flags|=8192):x&&(h.flags|=8192),x?(g&536870912)!==0&&(h.flags&128)===0&&(Ie(h),h.subtreeFlags&6&&(h.flags|=8192)):Ie(h),g=h.updateQueue,g!==null&&jv(h,g.retryQueue),g=null,c!==null&&c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(g=c.memoizedState.cachePool.pool),x=null,h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(x=h.memoizedState.cachePool.pool),x!==g&&(h.flags|=2048),c!==null&&W(Zo),null;case 24:return g=null,c!==null&&(g=c.memoizedState.cache),h.memoizedState.cache!==g&&(h.flags|=2048),Zn(Ze),Ie(h),null;case 25:return null;case 30:return null}throw Error(a(156,h.tag))}function z7(c,h){switch(lm(h),h.tag){case 1:return c=h.flags,c&65536?(h.flags=c&-65537|128,h):null;case 3:return Zn(Ze),St(),c=h.flags,(c&65536)!==0&&(c&128)===0?(h.flags=c&-65537|128,h):null;case 26:case 27:case 5:return _t(h),null;case 31:if(h.memoizedState!==null){if(ia(h),h.alternate===null)throw Error(a(340));jo()}return c=h.flags,c&65536?(h.flags=c&-65537|128,h):null;case 13:if(ia(h),c=h.memoizedState,c!==null&&c.dehydrated!==null){if(h.alternate===null)throw Error(a(340));jo()}return c=h.flags,c&65536?(h.flags=c&-65537|128,h):null;case 19:return W(He),null;case 4:return St(),null;case 10:return Zn(h.type),null;case 22:case 23:return ia(h),wm(),c!==null&&W(Zo),c=h.flags,c&65536?(h.flags=c&-65537|128,h):null;case 24:return Zn(Ze),null;case 25:return null;default:return null}}function VA(c,h){switch(lm(h),h.tag){case 3:Zn(Ze),St();break;case 26:case 27:case 5:_t(h);break;case 4:St();break;case 31:h.memoizedState!==null&&ia(h);break;case 13:ia(h);break;case 19:W(He);break;case 10:Zn(h.type);break;case 22:case 23:ia(h),wm(),c!==null&&W(Zo);break;case 24:Zn(Ze)}}function Pc(c,h){try{var g=h.updateQueue,x=g!==null?g.lastEffect:null;if(x!==null){var T=x.next;g=T;do{if((g.tag&c)===c){x=void 0;var D=g.create,I=g.inst;x=D(),I.destroy=x}g=g.next}while(g!==T)}}catch(V){me(h,h.return,V)}}function Gi(c,h,g){try{var x=h.updateQueue,T=x!==null?x.lastEffect:null;if(T!==null){var D=T.next;x=D;do{if((x.tag&c)===c){var I=x.inst,V=I.destroy;if(V!==void 0){I.destroy=void 0,T=h;var X=g,J=V;try{J()}catch(lt){me(T,X,lt)}}}x=x.next}while(x!==D)}}catch(lt){me(h,h.return,lt)}}function GA(c){var h=c.updateQueue;if(h!==null){var g=c.stateNode;try{ET(h,g)}catch(x){me(c,c.return,x)}}}function HA(c,h,g){g.props=Qo(c.type,c.memoizedProps),g.state=c.memoizedState;try{g.componentWillUnmount()}catch(x){me(c,h,x)}}function Oc(c,h){try{var g=c.ref;if(g!==null){switch(c.tag){case 26:case 27:case 5:var x=c.stateNode;break;case 30:x=c.stateNode;break;default:x=c.stateNode}typeof g=="function"?c.refCleanup=g(x):g.current=x}}catch(T){me(c,h,T)}}function pn(c,h){var g=c.ref,x=c.refCleanup;if(g!==null)if(typeof x=="function")try{x()}catch(T){me(c,h,T)}finally{c.refCleanup=null,c=c.alternate,c!=null&&(c.refCleanup=null)}else if(typeof g=="function")try{g(null)}catch(T){me(c,h,T)}else g.current=null}function UA(c){var h=c.type,g=c.memoizedProps,x=c.stateNode;try{t:switch(h){case"button":case"input":case"select":case"textarea":g.autoFocus&&x.focus();break t;case"img":g.src?x.src=g.src:g.srcSet&&(x.srcset=g.srcSet)}}catch(T){me(c,c.return,T)}}function e0(c,h,g){try{var x=c.stateNode;nV(x,c.type,g,h),x[Hr]=h}catch(T){me(c,c.return,T)}}function FA(c){return c.tag===5||c.tag===3||c.tag===26||c.tag===27&&Zi(c.type)||c.tag===4}function r0(c){t:for(;;){for(;c.sibling===null;){if(c.return===null||FA(c.return))return null;c=c.return}for(c.sibling.return=c.return,c=c.sibling;c.tag!==5&&c.tag!==6&&c.tag!==18;){if(c.tag===27&&Zi(c.type)||c.flags&2||c.child===null||c.tag===4)continue t;c.child.return=c,c=c.child}if(!(c.flags&2))return c.stateNode}}function a0(c,h,g){var x=c.tag;if(x===5||x===6)c=c.stateNode,h?(g.nodeType===9?g.body:g.nodeName==="HTML"?g.ownerDocument.body:g).insertBefore(c,h):(h=g.nodeType===9?g.body:g.nodeName==="HTML"?g.ownerDocument.body:g,h.appendChild(c),g=g._reactRootContainer,g!=null||h.onclick!==null||(h.onclick=Un));else if(x!==4&&(x===27&&Zi(c.type)&&(g=c.stateNode,h=null),c=c.child,c!==null))for(a0(c,h,g),c=c.sibling;c!==null;)a0(c,h,g),c=c.sibling}function Yv(c,h,g){var x=c.tag;if(x===5||x===6)c=c.stateNode,h?g.insertBefore(c,h):g.appendChild(c);else if(x!==4&&(x===27&&Zi(c.type)&&(g=c.stateNode),c=c.child,c!==null))for(Yv(c,h,g),c=c.sibling;c!==null;)Yv(c,h,g),c=c.sibling}function jA(c){var h=c.stateNode,g=c.memoizedProps;try{for(var x=c.type,T=h.attributes;T.length;)h.removeAttributeNode(T[0]);yr(h,x,g),h[vr]=c,h[Hr]=g}catch(D){me(c,c.return,D)}}var Qn=!1,$e=!1,n0=!1,YA=typeof WeakSet=="function"?WeakSet:Set,ur=null;function k7(c,h){if(c=c.containerInfo,A0=hd,c=aT(c),Ky(c)){if("selectionStart"in c)var g={start:c.selectionStart,end:c.selectionEnd};else t:{g=(g=c.ownerDocument)&&g.defaultView||window;var x=g.getSelection&&g.getSelection();if(x&&x.rangeCount!==0){g=x.anchorNode;var T=x.anchorOffset,D=x.focusNode;x=x.focusOffset;try{g.nodeType,D.nodeType}catch{g=null;break t}var I=0,V=-1,X=-1,J=0,lt=0,ct=c,tt=null;e:for(;;){for(var at;ct!==g||T!==0&&ct.nodeType!==3||(V=I+T),ct!==D||x!==0&&ct.nodeType!==3||(X=I+x),ct.nodeType===3&&(I+=ct.nodeValue.length),(at=ct.firstChild)!==null;)tt=ct,ct=at;for(;;){if(ct===c)break e;if(tt===g&&++J===T&&(V=I),tt===D&&++lt===x&&(X=I),(at=ct.nextSibling)!==null)break;ct=tt,tt=ct.parentNode}ct=at}g=V===-1||X===-1?null:{start:V,end:X}}else g=null}g=g||{start:0,end:0}}else g=null;for(D0={focusedElem:c,selectionRange:g},hd=!1,ur=h;ur!==null;)if(h=ur,c=h.child,(h.subtreeFlags&1028)!==0&&c!==null)c.return=h,ur=c;else for(;ur!==null;){switch(h=ur,D=h.alternate,c=h.flags,h.tag){case 0:if((c&4)!==0&&(c=h.updateQueue,c=c!==null?c.events:null,c!==null))for(g=0;g title"))),yr(D,x,g),D[vr]=c,lr(D),x=D;break t;case"link":var I=KD("link","href",T).get(x+(g.href||""));if(I){for(var V=0;VAe&&(I=Ae,Ae=Bt,Bt=I);var q=eT(V,Bt),Z=eT(V,Ae);if(q&&Z&&(at.rangeCount!==1||at.anchorNode!==q.node||at.anchorOffset!==q.offset||at.focusNode!==Z.node||at.focusOffset!==Z.offset)){var Q=ct.createRange();Q.setStart(q.node,q.offset),at.removeAllRanges(),Bt>Ae?(at.addRange(Q),at.extend(Z.node,Z.offset)):(Q.setEnd(Z.node,Z.offset),at.addRange(Q))}}}}for(ct=[],at=V;at=at.parentNode;)at.nodeType===1&&ct.push({element:at,left:at.scrollLeft,top:at.scrollTop});for(typeof V.focus=="function"&&V.focus(),V=0;Vg?32:g,B.T=null,g=f0,f0=null;var D=ji,I=ai;if(Je=0,Fl=ji=null,ai=0,(ve&6)!==0)throw Error(a(331));var V=ve;if(ve|=4,rD(D.current),JA(D,D.current,I,g),ve=V,Hc(0,!1),ta&&typeof ta.onPostCommitFiberRoot=="function")try{ta.onPostCommitFiberRoot(ic,D)}catch{}return!0}finally{j.p=T,B.T=x,xD(c,h)}}function bD(c,h,g){h=xa(g,h),h=jm(c.stateNode,h,2),c=ki(c,h,2),c!==null&&(sc(c,2),gn(c))}function me(c,h,g){if(c.tag===3)bD(c,c,g);else for(;h!==null;){if(h.tag===3){bD(h,c,g);break}else if(h.tag===1){var x=h.stateNode;if(typeof h.type.getDerivedStateFromError=="function"||typeof x.componentDidCatch=="function"&&(Fi===null||!Fi.has(x))){c=xa(g,c),g=wA(2),x=ki(h,g,2),x!==null&&(TA(g,x,h,c),sc(x,2),gn(x));break}}h=h.return}}function p0(c,h,g){var x=c.pingCache;if(x===null){x=c.pingCache=new G7;var T=new Set;x.set(h,T)}else T=x.get(h),T===void 0&&(T=new Set,x.set(h,T));T.has(g)||(s0=!0,T.add(g),c=Y7.bind(null,c,h,g),h.then(c,c))}function Y7(c,h,g){var x=c.pingCache;x!==null&&x.delete(h),c.pingedLanes|=c.suspendedLanes&g,c.warmLanes&=~g,Me===c&&(re&g)===g&&(Be===4||Be===3&&(re&62914560)===re&&300>Jr()-Wv?(ve&2)===0&&jl(c,0):l0|=g,Ul===re&&(Ul=0)),gn(c)}function wD(c,h){h===0&&(h=yw()),c=Uo(c,h),c!==null&&(sc(c,h),gn(c))}function X7(c){var h=c.memoizedState,g=0;h!==null&&(g=h.retryLane),wD(c,g)}function Z7(c,h){var g=0;switch(c.tag){case 31:case 13:var x=c.stateNode,T=c.memoizedState;T!==null&&(g=T.retryLane);break;case 19:x=c.stateNode;break;case 22:x=c.stateNode._retryCache;break;default:throw Error(a(314))}x!==null&&x.delete(h),wD(c,g)}function W7(c,h){return Ci(c,h)}var ed=null,Xl=null,g0=!1,rd=!1,y0=!1,Xi=0;function gn(c){c!==Xl&&c.next===null&&(Xl===null?ed=Xl=c:Xl=Xl.next=c),rd=!0,g0||(g0=!0,$7())}function Hc(c,h){if(!y0&&rd){y0=!0;do for(var g=!1,x=ed;x!==null;){if(c!==0){var T=x.pendingLanes;if(T===0)var D=0;else{var I=x.suspendedLanes,V=x.pingedLanes;D=(1<<31-ea(42|c)+1)-1,D&=T&~(I&~V),D=D&201326741?D&201326741|1:D?D|2:0}D!==0&&(g=!0,CD(x,D))}else D=re,D=ov(x,x===Me?D:0,x.cancelPendingCommit!==null||x.timeoutHandle!==-1),(D&3)===0||oc(x,D)||(g=!0,CD(x,D));x=x.next}while(g);y0=!1}}function q7(){TD()}function TD(){rd=g0=!1;var c=0;Xi!==0&&oV()&&(c=Xi);for(var h=Jr(),g=null,x=ed;x!==null;){var T=x.next,D=AD(x,h);D===0?(x.next=null,g===null?ed=T:g.next=T,T===null&&(Xl=g)):(g=x,(c!==0||(D&3)!==0)&&(rd=!0)),x=T}Je!==0&&Je!==5||Hc(c),Xi!==0&&(Xi=0)}function AD(c,h){for(var g=c.suspendedLanes,x=c.pingedLanes,T=c.expirationTimes,D=c.pendingLanes&-62914561;0V)break;var lt=X.transferSize,ct=X.initiatorType;lt&&OD(ct)&&(X=X.responseEnd,I+=lt*(X"u"?null:document;function ZD(c,h,g){var x=Zl;if(x&&typeof h=="string"&&h){var T=ma(h);T='link[rel="'+c+'"][href="'+T+'"]',typeof g=="string"&&(T+='[crossorigin="'+g+'"]'),XD.has(T)||(XD.add(T),c={rel:c,crossOrigin:g,href:h},x.querySelector(T)===null&&(h=x.createElement("link"),yr(h,"link",c),lr(h),x.head.appendChild(h)))}}function pV(c){ni.D(c),ZD("dns-prefetch",c,null)}function gV(c,h){ni.C(c,h),ZD("preconnect",c,h)}function yV(c,h,g){ni.L(c,h,g);var x=Zl;if(x&&c&&h){var T='link[rel="preload"][as="'+ma(h)+'"]';h==="image"&&g&&g.imageSrcSet?(T+='[imagesrcset="'+ma(g.imageSrcSet)+'"]',typeof g.imageSizes=="string"&&(T+='[imagesizes="'+ma(g.imageSizes)+'"]')):T+='[href="'+ma(c)+'"]';var D=T;switch(h){case"style":D=Wl(c);break;case"script":D=ql(c)}Da.has(D)||(c=v({rel:"preload",href:h==="image"&&g&&g.imageSrcSet?void 0:c,as:h},g),Da.set(D,c),x.querySelector(T)!==null||h==="style"&&x.querySelector(Yc(D))||h==="script"&&x.querySelector(Xc(D))||(h=x.createElement("link"),yr(h,"link",c),lr(h),x.head.appendChild(h)))}}function mV(c,h){ni.m(c,h);var g=Zl;if(g&&c){var x=h&&typeof h.as=="string"?h.as:"script",T='link[rel="modulepreload"][as="'+ma(x)+'"][href="'+ma(c)+'"]',D=T;switch(x){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":D=ql(c)}if(!Da.has(D)&&(c=v({rel:"modulepreload",href:c},h),Da.set(D,c),g.querySelector(T)===null)){switch(x){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(g.querySelector(Xc(D)))return}x=g.createElement("link"),yr(x,"link",c),lr(x),g.head.appendChild(x)}}}function _V(c,h,g){ni.S(c,h,g);var x=Zl;if(x&&c){var T=gl(x).hoistableStyles,D=Wl(c);h=h||"default";var I=T.get(D);if(!I){var V={loading:0,preload:null};if(I=x.querySelector(Yc(D)))V.loading=5;else{c=v({rel:"stylesheet",href:c,"data-precedence":h},g),(g=Da.get(D))&&N0(c,g);var X=I=x.createElement("link");lr(X),yr(X,"link",c),X._p=new Promise(function(J,lt){X.onload=J,X.onerror=lt}),X.addEventListener("load",function(){V.loading|=1}),X.addEventListener("error",function(){V.loading|=2}),V.loading|=4,sd(I,h,x)}I={type:"stylesheet",instance:I,count:1,state:V},T.set(D,I)}}}function xV(c,h){ni.X(c,h);var g=Zl;if(g&&c){var x=gl(g).hoistableScripts,T=ql(c),D=x.get(T);D||(D=g.querySelector(Xc(T)),D||(c=v({src:c,async:!0},h),(h=Da.get(T))&&P0(c,h),D=g.createElement("script"),lr(D),yr(D,"link",c),g.head.appendChild(D)),D={type:"script",instance:D,count:1,state:null},x.set(T,D))}}function SV(c,h){ni.M(c,h);var g=Zl;if(g&&c){var x=gl(g).hoistableScripts,T=ql(c),D=x.get(T);D||(D=g.querySelector(Xc(T)),D||(c=v({src:c,async:!0,type:"module"},h),(h=Da.get(T))&&P0(c,h),D=g.createElement("script"),lr(D),yr(D,"link",c),g.head.appendChild(D)),D={type:"script",instance:D,count:1,state:null},x.set(T,D))}}function WD(c,h,g,x){var T=(T=gt.current)?od(T):null;if(!T)throw Error(a(446));switch(c){case"meta":case"title":return null;case"style":return typeof g.precedence=="string"&&typeof g.href=="string"?(h=Wl(g.href),g=gl(T).hoistableStyles,x=g.get(h),x||(x={type:"style",instance:null,count:0,state:null},g.set(h,x)),x):{type:"void",instance:null,count:0,state:null};case"link":if(g.rel==="stylesheet"&&typeof g.href=="string"&&typeof g.precedence=="string"){c=Wl(g.href);var D=gl(T).hoistableStyles,I=D.get(c);if(I||(T=T.ownerDocument||T,I={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},D.set(c,I),(D=T.querySelector(Yc(c)))&&!D._p&&(I.instance=D,I.state.loading=5),Da.has(c)||(g={rel:"preload",as:"style",href:g.href,crossOrigin:g.crossOrigin,integrity:g.integrity,media:g.media,hrefLang:g.hrefLang,referrerPolicy:g.referrerPolicy},Da.set(c,g),D||bV(T,c,g,I.state))),h&&x===null)throw Error(a(528,""));return I}if(h&&x!==null)throw Error(a(529,""));return null;case"script":return h=g.async,g=g.src,typeof g=="string"&&h&&typeof h!="function"&&typeof h!="symbol"?(h=ql(g),g=gl(T).hoistableScripts,x=g.get(h),x||(x={type:"script",instance:null,count:0,state:null},g.set(h,x)),x):{type:"void",instance:null,count:0,state:null};default:throw Error(a(444,c))}}function Wl(c){return'href="'+ma(c)+'"'}function Yc(c){return'link[rel="stylesheet"]['+c+"]"}function qD(c){return v({},c,{"data-precedence":c.precedence,precedence:null})}function bV(c,h,g,x){c.querySelector('link[rel="preload"][as="style"]['+h+"]")?x.loading=1:(h=c.createElement("link"),x.preload=h,h.addEventListener("load",function(){return x.loading|=1}),h.addEventListener("error",function(){return x.loading|=2}),yr(h,"link",g),lr(h),c.head.appendChild(h))}function ql(c){return'[src="'+ma(c)+'"]'}function Xc(c){return"script[async]"+c}function $D(c,h,g){if(h.count++,h.instance===null)switch(h.type){case"style":var x=c.querySelector('style[data-href~="'+ma(g.href)+'"]');if(x)return h.instance=x,lr(x),x;var T=v({},g,{"data-href":g.href,"data-precedence":g.precedence,href:null,precedence:null});return x=(c.ownerDocument||c).createElement("style"),lr(x),yr(x,"style",T),sd(x,g.precedence,c),h.instance=x;case"stylesheet":T=Wl(g.href);var D=c.querySelector(Yc(T));if(D)return h.state.loading|=4,h.instance=D,lr(D),D;x=qD(g),(T=Da.get(T))&&N0(x,T),D=(c.ownerDocument||c).createElement("link"),lr(D);var I=D;return I._p=new Promise(function(V,X){I.onload=V,I.onerror=X}),yr(D,"link",x),h.state.loading|=4,sd(D,g.precedence,c),h.instance=D;case"script":return D=ql(g.src),(T=c.querySelector(Xc(D)))?(h.instance=T,lr(T),T):(x=g,(T=Da.get(D))&&(x=v({},g),P0(x,T)),c=c.ownerDocument||c,T=c.createElement("script"),lr(T),yr(T,"link",x),c.head.appendChild(T),h.instance=T);case"void":return null;default:throw Error(a(443,h.type))}else h.type==="stylesheet"&&(h.state.loading&4)===0&&(x=h.instance,h.state.loading|=4,sd(x,g.precedence,c));return h.instance}function sd(c,h,g){for(var x=g.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),T=x.length?x[x.length-1]:null,D=T,I=0;I title"):null)}function wV(c,h,g){if(g===1||h.itemProp!=null)return!1;switch(c){case"meta":case"title":return!0;case"style":if(typeof h.precedence!="string"||typeof h.href!="string"||h.href==="")break;return!0;case"link":if(typeof h.rel!="string"||typeof h.href!="string"||h.href===""||h.onLoad||h.onError)break;return h.rel==="stylesheet"?(c=h.disabled,typeof h.precedence=="string"&&c==null):!0;case"script":if(h.async&&typeof h.async!="function"&&typeof h.async!="symbol"&&!h.onLoad&&!h.onError&&h.src&&typeof h.src=="string")return!0}return!1}function JD(c){return!(c.type==="stylesheet"&&(c.state.loading&3)===0)}function TV(c,h,g,x){if(g.type==="stylesheet"&&(typeof x.media!="string"||matchMedia(x.media).matches!==!1)&&(g.state.loading&4)===0){if(g.instance===null){var T=Wl(x.href),D=h.querySelector(Yc(T));if(D){h=D._p,h!==null&&typeof h=="object"&&typeof h.then=="function"&&(c.count++,c=ud.bind(c),h.then(c,c)),g.state.loading|=4,g.instance=D,lr(D);return}D=h.ownerDocument||h,x=qD(x),(T=Da.get(T))&&N0(x,T),D=D.createElement("link"),lr(D);var I=D;I._p=new Promise(function(V,X){I.onload=V,I.onerror=X}),yr(D,"link",x),g.instance=D}c.stylesheets===null&&(c.stylesheets=new Map),c.stylesheets.set(g,h),(h=g.state.preload)&&(g.state.loading&3)===0&&(c.count++,g=ud.bind(c),h.addEventListener("load",g),h.addEventListener("error",g))}}var O0=0;function AV(c,h){return c.stylesheets&&c.count===0&&fd(c,c.stylesheets),0O0?50:800)+h);return c.unsuspend=g,function(){c.unsuspend=null,clearTimeout(x),clearTimeout(T)}}:null}function ud(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)fd(this,this.stylesheets);else if(this.unsuspend){var c=this.unsuspend;this.unsuspend=null,c()}}}var cd=null;function fd(c,h){c.stylesheets=null,c.unsuspend!==null&&(c.count++,cd=new Map,h.forEach(DV,c),cd=null,ud.call(c))}function DV(c,h){if(!(h.state.loading&4)){var g=cd.get(c);if(g)var x=g.get(null);else{g=new Map,cd.set(c,g);for(var T=c.querySelectorAll("link[data-precedence],style[data-precedence]"),D=0;D"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(e){console.error(e)}}return r(),j0.exports=UV(),j0.exports}var jV=FV();const YV=r=>r.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),XV=r=>r.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,a)=>a?a.toUpperCase():t.toLowerCase()),wC=r=>{const e=XV(r);return e.charAt(0).toUpperCase()+e.slice(1)},LN=(...r)=>r.filter((e,t,a)=>!!e&&e.trim()!==""&&a.indexOf(e)===t).join(" ").trim(),ZV=r=>{for(const e in r)if(e.startsWith("aria-")||e==="role"||e==="title")return!0};var WV={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const qV=fe.forwardRef(({color:r="currentColor",size:e=24,strokeWidth:t=2,absoluteStrokeWidth:a,className:n="",children:i,iconNode:o,...s},l)=>fe.createElement("svg",{ref:l,...WV,width:e,height:e,stroke:r,strokeWidth:a?Number(t)*24/Number(e):t,className:LN("lucide",n),...!i&&!ZV(s)&&{"aria-hidden":"true"},...s},[...o.map(([u,f])=>fe.createElement(u,f)),...Array.isArray(i)?i:[i]]));const ze=(r,e)=>{const t=fe.forwardRef(({className:a,...n},i)=>fe.createElement(qV,{ref:i,iconNode:e,className:LN(`lucide-${YV(wC(r))}`,`lucide-${r}`,a),...n}));return t.displayName=wC(r),t};const $V=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],EN=ze("activity",$V);const KV=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],QV=ze("arrow-left",KV);const JV=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],RN=ze("bell",JV);const t6=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],e6=ze("calendar",t6);const r6=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],Hg=ze("chart-column",r6);const a6=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],IN=ze("chevron-right",a6);const n6=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],jp=ze("clock",n6);const i6=[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]],o6=ze("dollar-sign",i6);const s6=[["path",{d:"M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4",key:"1slcih"}]],l6=ze("flame",s6);const u6=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],c6=ze("funnel",u6);const f6=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]],h6=ze("grid-3x3",f6);const v6=[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]],d6=ze("list",v6);const p6=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],g6=ze("menu",p6);const y6=[["path",{d:"M5 12h14",key:"1ays0h"}]],NN=ze("minus",y6);const m6=[["path",{d:"M12 16h.01",key:"1drbdi"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z",key:"1fd625"}]],_6=ze("octagon-alert",m6);const x6=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],S6=ze("search",x6);const b6=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],yx=ze("shield",b6);const w6=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],ub=ze("target",w6);const T6=[["path",{d:"M16 17h6v-6",key:"t6n2it"}],["path",{d:"m22 17-8.5-8.5-5 5L2 7",key:"x473p"}]],Do=ze("trending-down",T6);const A6=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],Qs=ze("trending-up",A6);const D6=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],mx=ze("triangle-alert",D6);const C6=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],M6=ze("x",C6);const L6=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],PN=ze("zap",L6),TC=[{id:"overview",label:"市场概览"},{id:"events",label:"热点事件"},{id:"products",label:"品种分析"},{id:"risks",label:"风险提醒"}];function E6({activeTab:r,onTabChange:e}){const[t,a]=fe.useState(new Date),[n,i]=fe.useState(!1),[o,s]=fe.useState(!1);fe.useEffect(()=>{const u=setInterval(()=>{a(new Date)},1e3),f=()=>{i(window.scrollY>10)};return window.addEventListener("scroll",f),()=>{clearInterval(u),window.removeEventListener("scroll",f)}},[]);const l=u=>u.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"});return z.jsxs("nav",{"code-path":"src/components/Navbar.tsx:50:5",className:`fixed top-0 left-0 right-0 z-50 transition-all duration-300 ${n?"bg-[#09090b]/95 backdrop-blur-md shadow-lg shadow-black/20":"bg-[#09090b]"}`,children:[z.jsx("div",{"code-path":"src/components/Navbar.tsx:57:7",className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:z.jsxs("div",{"code-path":"src/components/Navbar.tsx:58:9",className:"flex items-center justify-between h-16",children:[z.jsxs("div",{"code-path":"src/components/Navbar.tsx:60:11",className:"flex items-center gap-3",children:[z.jsx("div",{"code-path":"src/components/Navbar.tsx:61:13",className:"p-2 rounded-lg bg-[#7dd75a]/10",children:z.jsx(Hg,{"code-path":"src/components/Navbar.tsx:62:15",className:"w-5 h-5 text-[#7dd75a]"})}),z.jsxs("div",{"code-path":"src/components/Navbar.tsx:64:13",children:[z.jsx("h1",{"code-path":"src/components/Navbar.tsx:65:15",className:"text-lg font-bold text-white",children:"期货智析"}),z.jsx("p",{"code-path":"src/components/Navbar.tsx:66:15",className:"text-xs text-[#71717a] hidden sm:block",children:"智能期货期权分析系统"})]})]}),z.jsx("div",{"code-path":"src/components/Navbar.tsx:71:11",className:"hidden md:flex items-center gap-1",children:TC.map(u=>z.jsxs("button",{"code-path":"src/components/Navbar.tsx:73:15",onClick:()=>e(u.id),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all duration-200 relative ${r===u.id?"text-[#7dd75a]":"text-[#a1a1aa] hover:text-white"}`,children:[u.label,r===u.id&&z.jsx("div",{"code-path":"src/components/Navbar.tsx:84:19",className:"absolute bottom-0 left-1/2 -translate-x-1/2 w-4 h-0.5 bg-[#7dd75a] rounded-full"})]},u.id))}),z.jsxs("div",{"code-path":"src/components/Navbar.tsx:91:11",className:"flex items-center gap-4",children:[z.jsxs("div",{"code-path":"src/components/Navbar.tsx:93:13",className:"hidden sm:flex items-center gap-2 text-sm text-[#71717a]",children:[z.jsx(jp,{"code-path":"src/components/Navbar.tsx:94:15",className:"w-4 h-4"}),z.jsx("span",{"code-path":"src/components/Navbar.tsx:95:15",className:"font-mono",children:l(t)})]}),z.jsxs("button",{"code-path":"src/components/Navbar.tsx:99:13",className:"p-2 rounded-lg hover:bg-[#27272a] transition-colors relative",children:[z.jsx(RN,{"code-path":"src/components/Navbar.tsx:100:15",className:"w-4 h-4 text-[#a1a1aa]"}),z.jsx("span",{"code-path":"src/components/Navbar.tsx:101:15",className:"absolute top-1 right-1 w-2 h-2 bg-[#ef4444] rounded-full"})]}),z.jsx("button",{"code-path":"src/components/Navbar.tsx:105:13",onClick:()=>s(!o),className:"md:hidden p-2 rounded-lg hover:bg-[#27272a] transition-colors",children:o?z.jsx(M6,{"code-path":"src/components/Navbar.tsx:110:17",className:"w-5 h-5 text-[#a1a1aa]"}):z.jsx(g6,{"code-path":"src/components/Navbar.tsx:112:17",className:"w-5 h-5 text-[#a1a1aa]"})})]})]})}),o&&z.jsx("div",{"code-path":"src/components/Navbar.tsx:121:9",className:"md:hidden border-t border-[#27272a] bg-[#09090b]/95 backdrop-blur-md",children:z.jsxs("div",{"code-path":"src/components/Navbar.tsx:122:11",className:"px-4 py-3 space-y-1",children:[TC.map(u=>z.jsx("button",{"code-path":"src/components/Navbar.tsx:124:15",onClick:()=>{e(u.id),s(!1)},className:`w-full px-4 py-3 rounded-lg text-left text-sm font-medium transition-all duration-200 ${r===u.id?"bg-[#7dd75a]/10 text-[#7dd75a]":"text-[#a1a1aa] hover:bg-[#27272a] hover:text-white"}`,children:u.label},u.id)),z.jsx("div",{"code-path":"src/components/Navbar.tsx:139:13",className:"pt-3 border-t border-[#27272a] mt-3",children:z.jsxs("div",{"code-path":"src/components/Navbar.tsx:140:15",className:"flex items-center gap-2 text-sm text-[#71717a] px-4 py-2",children:[z.jsx(jp,{"code-path":"src/components/Navbar.tsx:141:17",className:"w-4 h-4"}),z.jsx("span",{"code-path":"src/components/Navbar.tsx:142:17",className:"font-mono",children:l(t)})]})})]})})]})}function R6({value:r,decimals:e=1,suffix:t=""}){const[a,n]=fe.useState(0),i=fe.useRef(null),o=1e3;return fe.useEffect(()=>{const s=l=>{i.current||(i.current=l);const u=Math.min((l-i.current)/o,1),f=1-Math.pow(1-u,3);n(r*f),u<1&&requestAnimationFrame(s)};return requestAnimationFrame(s),()=>{i.current=null}},[r]),z.jsxs("span",{"code-path":"src/components/MarketOverview.tsx:35:5",children:[a.toFixed(e),t]})}function I6({isUp:r}){const e=r?"0,30 10,25 20,28 30,20 40,22 50,15 60,18 70,10 80,12 90,5 100,8":"0,10 10,15 20,12 30,20 40,18 50,25 60,22 70,30 80,28 90,35 100,32";return z.jsxs("svg",{"code-path":"src/components/MarketOverview.tsx:48:5",viewBox:"0 0 100 40",className:"w-full h-10",children:[z.jsx("polyline",{"code-path":"src/components/MarketOverview.tsx:49:7",fill:"none",stroke:r?"#7dd75a":"#ef4444",strokeWidth:"2",points:e}),z.jsx("defs",{"code-path":"src/components/MarketOverview.tsx:55:7",children:z.jsxs("linearGradient",{"code-path":"src/components/MarketOverview.tsx:56:9",id:`gradient-${r}`,x1:"0%",y1:"0%",x2:"0%",y2:"100%",children:[z.jsx("stop",{"code-path":"src/components/MarketOverview.tsx:57:11",offset:"0%",stopColor:r?"#7dd75a":"#ef4444",stopOpacity:"0.3"}),z.jsx("stop",{"code-path":"src/components/MarketOverview.tsx:58:11",offset:"100%",stopColor:r?"#7dd75a":"#ef4444",stopOpacity:"0"})]})}),z.jsx("polygon",{"code-path":"src/components/MarketOverview.tsx:61:7",fill:`url(#gradient-${r})`,points:`${e} 100,40 0,40`})]})}function N6({data:r}){const e=[{title:"市场热度指数",value:r.heatIndex,change:r.heatChange,suffix:"",decimals:1,icon:EN,isUp:r.heatChange>0,description:r.heatChange>0?"多头情绪高涨":"市场情绪偏冷"},{title:"涨跌分布",value:r.upCount,change:r.downCount,suffix:"",decimals:0,icon:Hg,isUp:!0,description:`涨: ${r.upCount} | 跌: ${r.downCount}`,isDistribution:!0},{title:"资金流向",value:r.capitalFlow,change:0,suffix:"亿",decimals:1,icon:o6,isUp:r.capitalFlow>0,description:r.capitalFlow>0?"资金净流入":"资金净流出"},{title:"波动率指数",value:r.volatilityIndex,change:r.volatilityChange,suffix:"",decimals:1,icon:PN,isUp:r.volatilityChange>0,description:r.volatilityChange>0?"波动扩大":"波动收窄"}];return z.jsx("div",{"code-path":"src/components/MarketOverview.tsx:115:5",className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4",children:e.map((t,a)=>z.jsxs("div",{"code-path":"src/components/MarketOverview.tsx:117:9",className:"bg-[#0d0d10] border border-[#27272a] rounded-xl p-5 hover:border-[#7dd75a]/50 transition-all duration-300 hover:shadow-lg hover:shadow-[#7dd75a]/5 group",style:{animationDelay:`${a*100}ms`},children:[z.jsxs("div",{"code-path":"src/components/MarketOverview.tsx:124:11",className:"flex items-start justify-between mb-3",children:[z.jsxs("div",{"code-path":"src/components/MarketOverview.tsx:125:13",className:"flex items-center gap-2",children:[z.jsx("div",{"code-path":"src/components/MarketOverview.tsx:126:15",className:`p-2 rounded-lg ${t.isUp?"bg-[#7dd75a]/10":"bg-[#ef4444]/10"}`,children:z.jsx(t.icon,{"code-path":"src/components/MarketOverview.tsx:127:17",className:`w-4 h-4 ${t.isUp?"text-[#7dd75a]":"text-[#ef4444]"}`})}),z.jsx("span",{"code-path":"src/components/MarketOverview.tsx:129:15",className:"text-[#a1a1aa] text-sm",children:t.title})]}),!t.isDistribution&&t.change!==0&&z.jsxs("div",{"code-path":"src/components/MarketOverview.tsx:132:15",className:`flex items-center gap-1 text-xs ${t.change>0?"text-[#7dd75a]":"text-[#ef4444]"}`,children:[t.change>0?z.jsx(Qs,{"code-path":"src/components/MarketOverview.tsx:133:36",className:"w-3 h-3"}):z.jsx(Do,{"code-path":"src/components/MarketOverview.tsx:133:73",className:"w-3 h-3"}),z.jsxs("span",{"code-path":"src/components/MarketOverview.tsx:134:17",children:[t.change>0?"+":"",t.change,"%"]})]})]}),z.jsx("div",{"code-path":"src/components/MarketOverview.tsx:139:11",className:"mb-3",children:z.jsx("span",{"code-path":"src/components/MarketOverview.tsx:140:13",className:`text-2xl font-bold font-mono ${t.isUp?"text-white":"text-[#ef4444]"}`,children:t.isDistribution?z.jsxs("span",{"code-path":"src/components/MarketOverview.tsx:142:17",className:"flex items-baseline gap-2",children:[z.jsx("span",{"code-path":"src/components/MarketOverview.tsx:143:19",className:"text-[#7dd75a]",children:r.upCount}),z.jsx("span",{"code-path":"src/components/MarketOverview.tsx:144:19",className:"text-[#a1a1aa] text-lg",children:"/"}),z.jsx("span",{"code-path":"src/components/MarketOverview.tsx:145:19",className:"text-[#ef4444]",children:r.downCount})]}):z.jsx(z.Fragment,{children:z.jsx(R6,{"code-path":"src/components/MarketOverview.tsx:149:19",value:t.value,decimals:t.decimals,suffix:t.suffix})})})}),z.jsx("div",{"code-path":"src/components/MarketOverview.tsx:155:11",className:"text-xs text-[#a1a1aa] mb-3",children:t.description}),z.jsx(I6,{"code-path":"src/components/MarketOverview.tsx:157:11",isUp:t.isUp})]},t.title))})}function AC({level:r}){return z.jsx("div",{"code-path":"src/components/HotEvents.tsx:12:5",className:"flex gap-0.5",children:Array.from({length:5}).map((e,t)=>z.jsx("div",{"code-path":"src/components/HotEvents.tsx:14:9",className:`w-4 h-4 rounded-sm ${tz.jsx("div",{"code-path":"src/components/HotEvents.tsx:55:11",onClick:()=>t(a),className:`p-4 rounded-xl border cursor-pointer transition-all duration-200 ${e?.id===a.id?"border-[#7dd75a] bg-[#7dd75a]/5":"border-[#27272a] bg-[#0d0d10] hover:border-[#3f3f46]"}`,children:z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:64:13",className:"flex items-start justify-between gap-4",children:[z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:65:15",className:"flex-1",children:[z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:66:17",className:"flex items-center gap-2 mb-2",children:[z.jsx("h4",{"code-path":"src/components/HotEvents.tsx:67:19",className:"font-medium text-white",children:a.title}),z.jsx(P6,{"code-path":"src/components/HotEvents.tsx:68:19",impact:a.impact})]}),z.jsx("p",{"code-path":"src/components/HotEvents.tsx:71:17",className:"text-sm text-[#a1a1aa] mb-3 line-clamp-2",children:a.summary}),z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:73:17",className:"flex items-center gap-4 text-xs",children:[z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:74:19",className:"flex items-center gap-1 text-[#71717a]",children:[z.jsx(e6,{"code-path":"src/components/HotEvents.tsx:75:21",className:"w-3 h-3"}),z.jsx("span",{"code-path":"src/components/HotEvents.tsx:76:21",children:a.time})]}),z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:79:19",className:"flex items-center gap-2",children:[z.jsx(ub,{"code-path":"src/components/HotEvents.tsx:80:21",className:"w-3 h-3 text-[#71717a]"}),z.jsx("span",{"code-path":"src/components/HotEvents.tsx:81:21",className:"text-[#71717a]",children:"影响:"}),z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:82:21",className:"flex gap-1",children:[a.affectedProducts.slice(0,3).map(n=>z.jsx("span",{"code-path":"src/components/HotEvents.tsx:84:25",className:"px-1.5 py-0.5 rounded bg-[#27272a] text-[#e6e6e6]",children:n},n)),a.affectedProducts.length>3&&z.jsxs("span",{"code-path":"src/components/HotEvents.tsx:92:25",className:"text-[#71717a]",children:["+",a.affectedProducts.length-3]})]})]})]})]}),z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:99:15",className:"flex flex-col items-end gap-2",children:[z.jsx(AC,{"code-path":"src/components/HotEvents.tsx:100:17",level:a.impactLevel}),z.jsx(IN,{"code-path":"src/components/HotEvents.tsx:101:17",className:`w-4 h-4 transition-transform ${e?.id===a.id?"text-[#7dd75a] rotate-90":"text-[#71717a]"}`})]})]})},a.id))]}),z.jsx("div",{"code-path":"src/components/HotEvents.tsx:111:7",className:"lg:col-span-2",children:z.jsx("div",{"code-path":"src/components/HotEvents.tsx:112:9",className:"sticky top-4 p-5 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:e?z.jsxs(z.Fragment,{children:[z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:115:15",className:"flex items-center gap-2 mb-4",children:[z.jsx("div",{"code-path":"src/components/HotEvents.tsx:116:17",className:"p-2 rounded-lg bg-[#7dd75a]/10",children:z.jsx(mx,{"code-path":"src/components/HotEvents.tsx:117:19",className:"w-4 h-4 text-[#7dd75a]"})}),z.jsx("h3",{"code-path":"src/components/HotEvents.tsx:119:17",className:"font-semibold text-white",children:"智能分析"})]}),z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:122:15",className:"space-y-4",children:[z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:123:17",children:[z.jsx("h4",{"code-path":"src/components/HotEvents.tsx:124:19",className:"text-sm text-[#a1a1aa] mb-2",children:"事件解读"}),z.jsx("p",{"code-path":"src/components/HotEvents.tsx:125:19",className:"text-sm text-white leading-relaxed",children:e.analysis})]}),z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:128:17",children:[z.jsx("h4",{"code-path":"src/components/HotEvents.tsx:129:19",className:"text-sm text-[#a1a1aa] mb-2",children:"影响品种"}),z.jsx("div",{"code-path":"src/components/HotEvents.tsx:130:19",className:"flex flex-wrap gap-2",children:e.affectedProducts.map(a=>z.jsx("span",{"code-path":"src/components/HotEvents.tsx:132:23",className:`px-3 py-1.5 rounded-lg text-sm font-medium ${e.impact==="bullish"?"bg-[#7dd75a]/10 text-[#7dd75a]":e.impact==="bearish"?"bg-[#ef4444]/10 text-[#ef4444]":"bg-[#a1a1aa]/10 text-[#a1a1aa]"}`,children:a},a))})]}),z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:148:17",children:[z.jsx("h4",{"code-path":"src/components/HotEvents.tsx:149:19",className:"text-sm text-[#a1a1aa] mb-2",children:"风险提示"}),z.jsx("ul",{"code-path":"src/components/HotEvents.tsx:150:19",className:"space-y-2",children:e.risks.map((a,n)=>z.jsxs("li",{"code-path":"src/components/HotEvents.tsx:152:23",className:"flex items-start gap-2 text-sm text-[#e6e6e6]",children:[z.jsx("span",{"code-path":"src/components/HotEvents.tsx:153:25",className:"w-1.5 h-1.5 rounded-full bg-[#f59e0b] mt-1.5 flex-shrink-0"}),z.jsx("span",{"code-path":"src/components/HotEvents.tsx:154:25",children:a})]},n))})]}),z.jsx("div",{"code-path":"src/components/HotEvents.tsx:160:17",className:"pt-4 border-t border-[#27272a]",children:z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:161:19",className:"flex items-center justify-between",children:[z.jsx("span",{"code-path":"src/components/HotEvents.tsx:162:21",className:"text-sm text-[#a1a1aa]",children:"影响强度"}),z.jsx(AC,{"code-path":"src/components/HotEvents.tsx:163:21",level:e.impactLevel})]})})]})]}):z.jsxs("div",{"code-path":"src/components/HotEvents.tsx:169:13",className:"text-center py-8 text-[#71717a]",children:[z.jsx(mx,{"code-path":"src/components/HotEvents.tsx:170:15",className:"w-8 h-8 mx-auto mb-2 opacity-50"}),z.jsx("p",{"code-path":"src/components/HotEvents.tsx:171:15",children:"选择事件查看分析"})]})})})]})}function O6({direction:r,label:e}){const t={up:{icon:Qs,color:"text-[#7dd75a]",bg:"bg-[#7dd75a]/10",border:"border-[#7dd75a]/30"},down:{icon:Do,color:"text-[#ef4444]",bg:"bg-[#ef4444]/10",border:"border-[#ef4444]/30"},sideways:{icon:NN,color:"text-[#a1a1aa]",bg:"bg-[#a1a1aa]/10",border:"border-[#a1a1aa]/30"}},{icon:a,color:n,bg:i,border:o}=t[r];return z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:20:5",className:`flex items-center gap-1 px-2 py-1 rounded-md ${i} ${o} border`,children:[z.jsx(a,{"code-path":"src/components/ProductCard.tsx:21:7",className:`w-3 h-3 ${n}`}),z.jsx("span",{"code-path":"src/components/ProductCard.tsx:22:7",className:`text-xs font-medium ${n}`,children:e})]})}function z6({recommendation:r}){const e={long:{text:"逢低做多",color:"text-[#7dd75a]",bg:"bg-[#7dd75a]/10"},short:{text:"逢高做空",color:"text-[#ef4444]",bg:"bg-[#ef4444]/10"},wait:{text:"观望等待",color:"text-[#a1a1aa]",bg:"bg-[#a1a1aa]/10"}},{text:t,color:a,bg:n}=e[r];return z.jsx("span",{"code-path":"src/components/ProductCard.tsx:38:5",className:`px-2 py-1 rounded-md text-xs font-medium ${a} ${n}`,children:t})}function k6({rate:r}){const e=t=>t>=70?"bg-[#7dd75a]":t>=50?"bg-[#f59e0b]":"bg-[#ef4444]";return z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:53:5",className:"flex items-center gap-2",children:[z.jsx("div",{"code-path":"src/components/ProductCard.tsx:54:7",className:"flex-1 h-2 bg-[#27272a] rounded-full overflow-hidden",children:z.jsx("div",{"code-path":"src/components/ProductCard.tsx:55:9",className:`h-full rounded-full transition-all duration-500 ${e(r)}`,style:{width:`${r}%`}})}),z.jsxs("span",{"code-path":"src/components/ProductCard.tsx:60:7",className:`text-xs font-medium ${r>=70?"text-[#7dd75a]":r>=50?"text-[#f59e0b]":"text-[#ef4444]"}`,children:[r,"%"]})]})}function B6({product:r,onClick:e}){const t=r.change>=0,a={m5:"5分",m15:"15分",m30:"30分",m60:"60分"};return z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:78:5",onClick:e,className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10] hover:border-[#7dd75a]/50 transition-all duration-300 cursor-pointer group hover:shadow-lg hover:shadow-[#7dd75a]/5",children:[z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:83:7",className:"flex items-start justify-between mb-3",children:[z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:84:9",children:[z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:85:11",className:"flex items-center gap-2 mb-1",children:[z.jsx("h4",{"code-path":"src/components/ProductCard.tsx:86:13",className:"font-semibold text-white",children:r.name}),z.jsxs("span",{"code-path":"src/components/ProductCard.tsx:87:13",className:"text-xs text-[#71717a]",children:["(",r.code,")"]})]}),z.jsx(z6,{"code-path":"src/components/ProductCard.tsx:89:11",recommendation:r.recommendation})]}),z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:91:9",className:"text-right",children:[z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:92:11",className:`text-xl font-bold font-mono ${t?"text-[#7dd75a]":"text-[#ef4444]"}`,children:["¥",r.price.toLocaleString()]}),z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:95:11",className:`flex items-center justify-end gap-1 text-sm ${t?"text-[#7dd75a]":"text-[#ef4444]"}`,children:[t?z.jsx(Qs,{"code-path":"src/components/ProductCard.tsx:96:21",className:"w-3 h-3"}):z.jsx(Do,{"code-path":"src/components/ProductCard.tsx:96:58",className:"w-3 h-3"}),z.jsxs("span",{"code-path":"src/components/ProductCard.tsx:97:13",children:[t?"+":"",r.change.toFixed(2)," (",t?"+":"",r.changePercent,"%)"]})]})]})]}),z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:103:7",className:"mb-3",children:[z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:104:9",className:"flex items-center gap-1 text-xs text-[#a1a1aa] mb-2",children:[z.jsx(jp,{"code-path":"src/components/ProductCard.tsx:105:11",className:"w-3 h-3"}),z.jsx("span",{"code-path":"src/components/ProductCard.tsx:106:11",children:"多周期趋势"})]}),z.jsx("div",{"code-path":"src/components/ProductCard.tsx:108:9",className:"flex gap-2",children:Object.entries(r.cycles).map(([n,i])=>z.jsx(O6,{"code-path":"src/components/ProductCard.tsx:110:13",direction:i,label:a[n]},n))})]}),z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:116:7",className:"space-y-2 mb-3",children:[z.jsx("div",{"code-path":"src/components/ProductCard.tsx:117:9",className:"flex items-center justify-between text-xs",children:z.jsxs("span",{"code-path":"src/components/ProductCard.tsx:118:11",className:"text-[#a1a1aa] flex items-center gap-1",children:[z.jsx(Hg,{"code-path":"src/components/ProductCard.tsx:119:13",className:"w-3 h-3"}),"交易成功率"]})}),z.jsx(k6,{"code-path":"src/components/ProductCard.tsx:123:9",rate:r.successRate}),z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:125:9",className:"flex items-center justify-between text-xs",children:[z.jsx("span",{"code-path":"src/components/ProductCard.tsx:126:11",className:"text-[#a1a1aa]",children:"趋势评分"}),z.jsxs("span",{"code-path":"src/components/ProductCard.tsx:127:11",className:`font-medium ${r.trendScore>=80?"text-[#7dd75a]":r.trendScore>=60?"text-[#f59e0b]":"text-[#ef4444]"}`,children:[r.trendScore,"/100"]})]}),z.jsx("div",{"code-path":"src/components/ProductCard.tsx:131:9",className:"h-1.5 bg-[#27272a] rounded-full overflow-hidden",children:z.jsx("div",{"code-path":"src/components/ProductCard.tsx:132:11",className:`h-full rounded-full transition-all duration-500 ${r.trendScore>=80?"bg-[#7dd75a]":r.trendScore>=60?"bg-[#f59e0b]":"bg-[#ef4444]"}`,style:{width:`${r.trendScore}%`}})})]}),z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:142:7",className:"pt-3 border-t border-[#27272a]",children:[z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:143:9",className:"flex items-center gap-1 text-xs text-[#a1a1aa] mb-2",children:[z.jsx(ub,{"code-path":"src/components/ProductCard.tsx:144:11",className:"w-3 h-3"}),z.jsx("span",{"code-path":"src/components/ProductCard.tsx:145:11",children:"关键点位"})]}),z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:147:9",className:"flex justify-between text-xs",children:[z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:148:11",children:[z.jsx("span",{"code-path":"src/components/ProductCard.tsx:149:13",className:"text-[#71717a]",children:"压力: "}),z.jsx("span",{"code-path":"src/components/ProductCard.tsx:150:13",className:"text-[#ef4444] font-mono",children:r.keyLevels.resistance[0]?.toLocaleString()||"-"})]}),z.jsxs("div",{"code-path":"src/components/ProductCard.tsx:152:11",children:[z.jsx("span",{"code-path":"src/components/ProductCard.tsx:153:13",className:"text-[#71717a]",children:"支撑: "}),z.jsx("span",{"code-path":"src/components/ProductCard.tsx:154:13",className:"text-[#7dd75a] font-mono",children:r.keyLevels.support[0]?.toLocaleString()||"-"})]})]})]}),z.jsx("div",{"code-path":"src/components/ProductCard.tsx:160:7",className:"flex items-center justify-end mt-3 pt-2 border-t border-[#27272a]/50",children:z.jsxs("span",{"code-path":"src/components/ProductCard.tsx:161:9",className:"text-xs text-[#71717a] group-hover:text-[#7dd75a] transition-colors flex items-center gap-1",children:["查看详情",z.jsx(IN,{"code-path":"src/components/ProductCard.tsx:163:11",className:"w-3 h-3 group-hover:translate-x-1 transition-transform"})]})})]})}var _x=function(r,e){return _x=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,a){t.__proto__=a}||function(t,a){for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(t[n]=a[n])},_x(r,e)};function $(r,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");_x(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var V6=(function(){function r(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1}return r})(),G6=(function(){function r(){this.browser=new V6,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow=typeof window<"u"}return r})(),Ft=new G6;typeof wx=="object"&&typeof wx.getSystemInfoSync=="function"?(Ft.wxa=!0,Ft.touchEventsSupported=!0):typeof document>"u"&&typeof self<"u"?Ft.worker=!0:typeof navigator>"u"?(Ft.node=!0,Ft.svgSupported=!0):H6(navigator.userAgent,Ft);function H6(r,e){var t=e.browser,a=r.match(/Firefox\/([\d.]+)/),n=r.match(/MSIE\s([\d.]+)/)||r.match(/Trident\/.+?rv:(([\d.]+))/),i=r.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(r);a&&(t.firefox=!0,t.version=a[1]),n&&(t.ie=!0,t.version=n[1]),i&&(t.edge=!0,t.version=i[1],t.newEdge=+i[1].split(".")[0]>18),o&&(t.weChat=!0),e.svgSupported=typeof SVGRect<"u",e.touchEventsSupported="ontouchstart"in window&&!t.ie&&!t.edge,e.pointerEventsSupported="onpointerdown"in window&&(t.edge||t.ie&&+t.version>=11),e.domSupported=typeof document<"u";var s=document.documentElement.style;e.transform3dSupported=(t.ie&&"transition"in s||t.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||t.ie&&+t.version>=9}var cb=12,ON="sans-serif",Co=cb+"px "+ON,U6=20,F6=100,j6="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function Y6(r){var e={};if(typeof JSON>"u")return e;for(var t=0;t=0)s=o*t.length;else for(var l=0;l>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",a[l]+":0",n[u]+":0",a[1-l]+":auto",n[1-u]+":auto",""].join("!important;"),r.appendChild(o),t.push(o)}return t}function hG(r,e,t){for(var a=t?"invTrans":"trans",n=e[a],i=e.srcCoords,o=[],s=[],l=!0,u=0;u<4;u++){var f=r[u].getBoundingClientRect(),v=2*u,d=f.left,p=f.top;o.push(d,p),l=l&&i&&d===i[v]&&p===i[v+1],s.push(r[u].offsetLeft,r[u].offsetTop)}return l&&n?n:(e.srcCoords=o,e[a]=t?EC(s,o):EC(o,s))}function UN(r){return r.nodeName.toUpperCase()==="CANVAS"}var vG=/([&<>"'])/g,dG={"&":"&","<":"<",">":">",'"':""","'":"'"};function ca(r){return r==null?"":(r+"").replace(vG,function(e,t){return dG[t]})}var pG=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,q0=[],gG=Ft.browser.firefox&&+Ft.browser.version.split(".")[0]<39;function Mx(r,e,t,a){return t=t||{},a?IC(r,e,t):gG&&e.layerX!=null&&e.layerX!==e.offsetX?(t.zrX=e.layerX,t.zrY=e.layerY):e.offsetX!=null?(t.zrX=e.offsetX,t.zrY=e.offsetY):IC(r,e,t),t}function IC(r,e,t){if(Ft.domSupported&&r.getBoundingClientRect){var a=e.clientX,n=e.clientY;if(UN(r)){var i=r.getBoundingClientRect();t.zrX=a-i.left,t.zrY=n-i.top;return}else if(Cx(q0,r,a,n)){t.zrX=q0[0],t.zrY=q0[1];return}}t.zrX=t.zrY=0}function yb(r){return r||window.event}function Ia(r,e,t){if(e=yb(e),e.zrX!=null)return e;var a=e.type,n=a&&a.indexOf("touch")>=0;if(n){var o=a!=="touchend"?e.targetTouches[0]:e.changedTouches[0];o&&Mx(r,o,e,t)}else{Mx(r,e,e,t);var i=yG(e);e.zrDelta=i?i/120:-(e.detail||0)/3}var s=e.button;return e.which==null&&s!==void 0&&pG.test(e.type)&&(e.which=s&1?1:s&2?3:s&4?2:0),e}function yG(r){var e=r.wheelDelta;if(e)return e;var t=r.deltaX,a=r.deltaY;if(t==null||a==null)return e;var n=Math.abs(a!==0?a:t),i=a>0?-1:a<0?1:t>0?-1:1;return 3*n*i}function Lx(r,e,t,a){r.addEventListener(e,t,a)}function mG(r,e,t,a){r.removeEventListener(e,t,a)}var yi=function(r){r.preventDefault(),r.stopPropagation(),r.cancelBubble=!0};function NC(r){return r.which===2||r.which===3}var _G=(function(){function r(){this._track=[]}return r.prototype.recognize=function(e,t,a){return this._doTrack(e,t,a),this._recognize(e)},r.prototype.clear=function(){return this._track.length=0,this},r.prototype._doTrack=function(e,t,a){var n=e.touches;if(n){for(var i={points:[],touches:[],target:t,event:e},o=0,s=n.length;o1&&a&&a.length>1){var i=PC(a)/PC(n);!isFinite(i)&&(i=1),e.pinchScale=i;var o=xG(a);return e.pinchX=o[0],e.pinchY=o[1],{type:"pinch",target:r[0].target,event:e}}}}};function Ua(){return[1,0,0,1,0,0]}function Yg(r){return r[0]=1,r[1]=0,r[2]=0,r[3]=1,r[4]=0,r[5]=0,r}function mb(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r}function vi(r,e,t){var a=e[0]*t[0]+e[2]*t[1],n=e[1]*t[0]+e[3]*t[1],i=e[0]*t[2]+e[2]*t[3],o=e[1]*t[2]+e[3]*t[3],s=e[0]*t[4]+e[2]*t[5]+e[4],l=e[1]*t[4]+e[3]*t[5]+e[5];return r[0]=a,r[1]=n,r[2]=i,r[3]=o,r[4]=s,r[5]=l,r}function Pn(r,e,t){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4]+t[0],r[5]=e[5]+t[1],r}function sl(r,e,t){var a=e[0],n=e[2],i=e[4],o=e[1],s=e[3],l=e[5],u=Math.sin(t),f=Math.cos(t);return r[0]=a*f+o*u,r[1]=-a*u+o*f,r[2]=n*f+s*u,r[3]=-n*u+f*s,r[4]=f*i+u*l,r[5]=f*l-u*i,r}function _b(r,e,t){var a=t[0],n=t[1];return r[0]=e[0]*a,r[1]=e[1]*n,r[2]=e[2]*a,r[3]=e[3]*n,r[4]=e[4]*a,r[5]=e[5]*n,r}function ju(r,e){var t=e[0],a=e[2],n=e[4],i=e[1],o=e[3],s=e[5],l=t*o-i*a;return l?(l=1/l,r[0]=o*l,r[1]=-i*l,r[2]=-a*l,r[3]=t*l,r[4]=(a*s-o*n)*l,r[5]=(i*n-t*s)*l,r):null}function SG(r){var e=Ua();return mb(e,r),e}var Pt=(function(){function r(e,t){this.x=e||0,this.y=t||0}return r.prototype.copy=function(e){return this.x=e.x,this.y=e.y,this},r.prototype.clone=function(){return new r(this.x,this.y)},r.prototype.set=function(e,t){return this.x=e,this.y=t,this},r.prototype.equal=function(e){return e.x===this.x&&e.y===this.y},r.prototype.add=function(e){return this.x+=e.x,this.y+=e.y,this},r.prototype.scale=function(e){this.x*=e,this.y*=e},r.prototype.scaleAndAdd=function(e,t){this.x+=e.x*t,this.y+=e.y*t},r.prototype.sub=function(e){return this.x-=e.x,this.y-=e.y,this},r.prototype.dot=function(e){return this.x*e.x+this.y*e.y},r.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},r.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},r.prototype.normalize=function(){var e=this.len();return this.x/=e,this.y/=e,this},r.prototype.distance=function(e){var t=this.x-e.x,a=this.y-e.y;return Math.sqrt(t*t+a*a)},r.prototype.distanceSquare=function(e){var t=this.x-e.x,a=this.y-e.y;return t*t+a*a},r.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},r.prototype.transform=function(e){if(e){var t=this.x,a=this.y;return this.x=e[0]*t+e[2]*a+e[4],this.y=e[1]*t+e[3]*a+e[5],this}},r.prototype.toArray=function(e){return e[0]=this.x,e[1]=this.y,e},r.prototype.fromArray=function(e){this.x=e[0],this.y=e[1]},r.set=function(e,t,a){e.x=t,e.y=a},r.copy=function(e,t){e.x=t.x,e.y=t.y},r.len=function(e){return Math.sqrt(e.x*e.x+e.y*e.y)},r.lenSquare=function(e){return e.x*e.x+e.y*e.y},r.dot=function(e,t){return e.x*t.x+e.y*t.y},r.add=function(e,t,a){e.x=t.x+a.x,e.y=t.y+a.y},r.sub=function(e,t,a){e.x=t.x-a.x,e.y=t.y-a.y},r.scale=function(e,t,a){e.x=t.x*a,e.y=t.y*a},r.scaleAndAdd=function(e,t,a,n){e.x=t.x+a.x*n,e.y=t.y+a.y*n},r.lerp=function(e,t,a,n){var i=1-n;e.x=i*t.x+n*a.x,e.y=i*t.y+n*a.y},r})(),xd=Math.min,Sd=Math.max,es=new Pt,rs=new Pt,as=new Pt,ns=new Pt,Jc=new Pt,tf=new Pt,kt=(function(){function r(e,t,a,n){a<0&&(e=e+a,a=-a),n<0&&(t=t+n,n=-n),this.x=e,this.y=t,this.width=a,this.height=n}return r.prototype.union=function(e){var t=xd(e.x,this.x),a=xd(e.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=Sd(e.x+e.width,this.x+this.width)-t:this.width=e.width,isFinite(this.y)&&isFinite(this.height)?this.height=Sd(e.y+e.height,this.y+this.height)-a:this.height=e.height,this.x=t,this.y=a},r.prototype.applyTransform=function(e){r.applyTransform(this,this,e)},r.prototype.calculateTransform=function(e){var t=this,a=e.width/t.width,n=e.height/t.height,i=Ua();return Pn(i,i,[-t.x,-t.y]),_b(i,i,[a,n]),Pn(i,i,[e.x,e.y]),i},r.prototype.intersect=function(e,t){if(!e)return!1;e instanceof r||(e=r.create(e));var a=this,n=a.x,i=a.x+a.width,o=a.y,s=a.y+a.height,l=e.x,u=e.x+e.width,f=e.y,v=e.y+e.height,d=!(iy&&(y=w,m<_?Pt.set(tf,-m,0):Pt.set(tf,_,0)):wy&&(y=A,S=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height},r.prototype.clone=function(){return new r(this.x,this.y,this.width,this.height)},r.prototype.copy=function(e){r.copy(this,e)},r.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},r.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},r.prototype.isZero=function(){return this.width===0||this.height===0},r.create=function(e){return new r(e.x,e.y,e.width,e.height)},r.copy=function(e,t){e.x=t.x,e.y=t.y,e.width=t.width,e.height=t.height},r.applyTransform=function(e,t,a){if(!a){e!==t&&r.copy(e,t);return}if(a[1]<1e-5&&a[1]>-1e-5&&a[2]<1e-5&&a[2]>-1e-5){var n=a[0],i=a[3],o=a[4],s=a[5];e.x=t.x*n+o,e.y=t.y*i+s,e.width=t.width*n,e.height=t.height*i,e.width<0&&(e.x+=e.width,e.width=-e.width),e.height<0&&(e.y+=e.height,e.height=-e.height);return}es.x=as.x=t.x,es.y=ns.y=t.y,rs.x=ns.x=t.x+t.width,rs.y=as.y=t.y+t.height,es.transform(a),ns.transform(a),rs.transform(a),as.transform(a),e.x=xd(es.x,rs.x,as.x,ns.x),e.y=xd(es.y,rs.y,as.y,ns.y);var l=Sd(es.x,rs.x,as.x,ns.x),u=Sd(es.y,rs.y,as.y,ns.y);e.width=l-e.x,e.height=u-e.y},r})(),FN="silent";function bG(r,e,t){return{type:r,event:t,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:t.zrX,offsetY:t.zrY,gestureEvent:t.gestureEvent,pinchX:t.pinchX,pinchY:t.pinchY,pinchScale:t.pinchScale,wheelDelta:t.zrDelta,zrByTouch:t.zrByTouch,which:t.which,stop:wG}}function wG(){yi(this.event)}var TG=(function(r){De(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.handler=null,t}return e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e})(ja),ef=(function(){function r(e,t){this.x=e,this.y=t}return r})(),AG=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],K0=new kt(0,0,0,0),jN=(function(r){De(e,r);function e(t,a,n,i,o){var s=r.call(this)||this;return s._hovered=new ef(0,0),s.storage=t,s.painter=a,s.painterRoot=i,s._pointerSize=o,n=n||new TG,s.proxy=null,s.setHandlerProxy(n),s._draggingMgr=new lG(s),s}return e.prototype.setHandlerProxy=function(t){this.proxy&&this.proxy.dispose(),t&&(P(AG,function(a){t.on&&t.on(a,this[a],this)},this),t.handler=this),this.proxy=t},e.prototype.mousemove=function(t){var a=t.zrX,n=t.zrY,i=YN(this,a,n),o=this._hovered,s=o.target;s&&!s.__zr&&(o=this.findHover(o.x,o.y),s=o.target);var l=this._hovered=i?new ef(a,n):this.findHover(a,n),u=l.target,f=this.proxy;f.setCursor&&f.setCursor(u?u.cursor:"default"),s&&u!==s&&this.dispatchToElement(o,"mouseout",t),this.dispatchToElement(l,"mousemove",t),u&&u!==s&&this.dispatchToElement(l,"mouseover",t)},e.prototype.mouseout=function(t){var a=t.zrEventControl;a!=="only_globalout"&&this.dispatchToElement(this._hovered,"mouseout",t),a!=="no_globalout"&&this.trigger("globalout",{type:"globalout",event:t})},e.prototype.resize=function(){this._hovered=new ef(0,0)},e.prototype.dispatch=function(t,a){var n=this[t];n&&n.call(this,a)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(t){var a=this.proxy;a.setCursor&&a.setCursor(t)},e.prototype.dispatchToElement=function(t,a,n){t=t||{};var i=t.target;if(!(i&&i.silent)){for(var o="on"+a,s=bG(a,t,n);i&&(i[o]&&(s.cancelBubble=!!i[o].call(i,s)),i.trigger(a,s),i=i.__hostTarget?i.__hostTarget:i.parent,!s.cancelBubble););s.cancelBubble||(this.trigger(a,s),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer(function(l){typeof l[o]=="function"&&l[o].call(l,s),l.trigger&&l.trigger(a,s)}))}},e.prototype.findHover=function(t,a,n){var i=this.storage.getDisplayList(),o=new ef(t,a);if(OC(i,o,t,a,n),this._pointerSize&&!o.target){for(var s=[],l=this._pointerSize,u=l/2,f=new kt(t-u,a-u,l,l),v=i.length-1;v>=0;v--){var d=i[v];d!==n&&!d.ignore&&!d.ignoreCoarsePointer&&(!d.parent||!d.parent.ignoreCoarsePointer)&&(K0.copy(d.getBoundingRect()),d.transform&&K0.applyTransform(d.transform),K0.intersect(f)&&s.push(d))}if(s.length)for(var p=4,y=Math.PI/12,m=Math.PI*2,_=0;_4)return;this._downPoint=null}this.dispatchToElement(i,r,e)}});function DG(r,e,t){if(r[r.rectHover?"rectContain":"contain"](e,t)){for(var a=r,n=void 0,i=!1;a;){if(a.ignoreClip&&(i=!0),!i){var o=a.getClipPath();if(o&&!o.contain(e,t))return!1;a.silent&&(n=!0)}var s=a.__hostTarget;a=s||a.parent}return n?FN:!0}return!1}function OC(r,e,t,a,n){for(var i=r.length-1;i>=0;i--){var o=r[i],s=void 0;if(o!==n&&!o.ignore&&(s=DG(o,t,a))&&(!e.topTarget&&(e.topTarget=o),s!==FN)){e.target=o;break}}}function YN(r,e,t){var a=r.painter;return e<0||e>a.getWidth()||t<0||t>a.getHeight()}var XN=32,rf=7;function CG(r){for(var e=0;r>=XN;)e|=r&1,r>>=1;return r+e}function zC(r,e,t,a){var n=e+1;if(n===t)return 1;if(a(r[n++],r[e])<0){for(;n=0;)n++;return n-e}function MG(r,e,t){for(t--;e>>1,n(i,r[l])<0?s=l:o=l+1;var u=a-o;switch(u){case 3:r[o+3]=r[o+2];case 2:r[o+2]=r[o+1];case 1:r[o+1]=r[o];break;default:for(;u>0;)r[o+u]=r[o+u-1],u--}r[o]=i}}function Q0(r,e,t,a,n,i){var o=0,s=0,l=1;if(i(r,e[t+n])>0){for(s=a-n;l0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=n,l+=n}else{for(s=n+1;ls&&(l=s);var u=o;o=n-l,l=n-u}for(o++;o>>1);i(r,e[t+f])>0?o=f+1:l=f}return l}function J0(r,e,t,a,n,i){var o=0,s=0,l=1;if(i(r,e[t+n])<0){for(s=n+1;ls&&(l=s);var u=o;o=n-l,l=n-u}else{for(s=a-n;l=0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=n,l+=n}for(o++;o>>1);i(r,e[t+f])<0?l=f:o=f+1}return l}function LG(r,e){var t=rf,a,n,i=0;r.length;var o=[];a=[],n=[];function s(p,y){a[i]=p,n[i]=y,i+=1}function l(){for(;i>1;){var p=i-2;if(p>=1&&n[p-1]<=n[p]+n[p+1]||p>=2&&n[p-2]<=n[p]+n[p-1])n[p-1]n[p+1])break;f(p)}}function u(){for(;i>1;){var p=i-2;p>0&&n[p-1]=rf||L>=rf);if(E)break;M<0&&(M=0),M+=2}if(t=M,t<1&&(t=1),y===1){for(S=0;S<_;S++)r[A+S]=r[w+S];r[A+_]=o[b]}else{if(y===0)throw new Error;for(S=0;S=0;S--)r[C+S]=r[M+S];r[A]=o[w];return}for(var L=t;;){var E=0,R=0,N=!1;do if(e(o[w],r[b])<0){if(r[A--]=r[b--],E++,R=0,--y===0){N=!0;break}}else if(r[A--]=o[w--],R++,E=0,--_===1){N=!0;break}while((E|R)=0;S--)r[C+S]=r[M+S];if(y===0){N=!0;break}}if(r[A--]=o[w--],--_===1){N=!0;break}if(R=_-Q0(r[b],o,0,_,_-1,e),R!==0){for(A-=R,w-=R,_-=R,C=A+1,M=w+1,S=0;S=rf||R>=rf);if(N)break;L<0&&(L=0),L+=2}if(t=L,t<1&&(t=1),_===1){for(A-=y,b-=y,C=A+1,M=b+1,S=y-1;S>=0;S--)r[C+S]=r[M+S];r[A]=o[w]}else{if(_===0)throw new Error;for(M=A-(_-1),S=0;S<_;S++)r[M+S]=o[S]}}return{mergeRuns:l,forceMergeRuns:u,pushRun:s}}function Dp(r,e,t,a){t||(t=0),a||(a=r.length);var n=a-t;if(!(n<2)){var i=0;if(ns&&(l=s),kC(r,t,t+l,t+i,e),i=l}o.pushRun(t,i),o.mergeRuns(),n-=i,t+=i}while(n!==0);o.forceMergeRuns()}}var fa=1,Lf=2,mu=4,BC=!1;function t1(){BC||(BC=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function VC(r,e){return r.zlevel===e.zlevel?r.z===e.z?r.z2-e.z2:r.z-e.z:r.zlevel-e.zlevel}var EG=(function(){function r(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=VC}return r.prototype.traverse=function(e,t){for(var a=0;a0&&(f.__clipPaths=[]),isNaN(f.z)&&(t1(),f.z=0),isNaN(f.z2)&&(t1(),f.z2=0),isNaN(f.zlevel)&&(t1(),f.zlevel=0),this._displayList[this._displayListLen++]=f}var v=e.getDecalElement&&e.getDecalElement();v&&this._updateAndAddDisplayable(v,t,a);var d=e.getTextGuideLine();d&&this._updateAndAddDisplayable(d,t,a);var p=e.getTextContent();p&&this._updateAndAddDisplayable(p,t,a)}},r.prototype.addRoot=function(e){e.__zr&&e.__zr.storage===this||this._roots.push(e)},r.prototype.delRoot=function(e){if(e instanceof Array){for(var t=0,a=e.length;t=0&&this._roots.splice(n,1)},r.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},r.prototype.getRoots=function(){return this._roots},r.prototype.dispose=function(){this._displayList=null,this._roots=null},r})(),Zp;Zp=Ft.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(r){return setTimeout(r,16)};var Uf={linear:function(r){return r},quadraticIn:function(r){return r*r},quadraticOut:function(r){return r*(2-r)},quadraticInOut:function(r){return(r*=2)<1?.5*r*r:-.5*(--r*(r-2)-1)},cubicIn:function(r){return r*r*r},cubicOut:function(r){return--r*r*r+1},cubicInOut:function(r){return(r*=2)<1?.5*r*r*r:.5*((r-=2)*r*r+2)},quarticIn:function(r){return r*r*r*r},quarticOut:function(r){return 1- --r*r*r*r},quarticInOut:function(r){return(r*=2)<1?.5*r*r*r*r:-.5*((r-=2)*r*r*r-2)},quinticIn:function(r){return r*r*r*r*r},quinticOut:function(r){return--r*r*r*r*r+1},quinticInOut:function(r){return(r*=2)<1?.5*r*r*r*r*r:.5*((r-=2)*r*r*r*r+2)},sinusoidalIn:function(r){return 1-Math.cos(r*Math.PI/2)},sinusoidalOut:function(r){return Math.sin(r*Math.PI/2)},sinusoidalInOut:function(r){return .5*(1-Math.cos(Math.PI*r))},exponentialIn:function(r){return r===0?0:Math.pow(1024,r-1)},exponentialOut:function(r){return r===1?1:1-Math.pow(2,-10*r)},exponentialInOut:function(r){return r===0?0:r===1?1:(r*=2)<1?.5*Math.pow(1024,r-1):.5*(-Math.pow(2,-10*(r-1))+2)},circularIn:function(r){return 1-Math.sqrt(1-r*r)},circularOut:function(r){return Math.sqrt(1- --r*r)},circularInOut:function(r){return(r*=2)<1?-.5*(Math.sqrt(1-r*r)-1):.5*(Math.sqrt(1-(r-=2)*r)+1)},elasticIn:function(r){var e,t=.1,a=.4;return r===0?0:r===1?1:(!t||t<1?(t=1,e=a/4):e=a*Math.asin(1/t)/(2*Math.PI),-(t*Math.pow(2,10*(r-=1))*Math.sin((r-e)*(2*Math.PI)/a)))},elasticOut:function(r){var e,t=.1,a=.4;return r===0?0:r===1?1:(!t||t<1?(t=1,e=a/4):e=a*Math.asin(1/t)/(2*Math.PI),t*Math.pow(2,-10*r)*Math.sin((r-e)*(2*Math.PI)/a)+1)},elasticInOut:function(r){var e,t=.1,a=.4;return r===0?0:r===1?1:(!t||t<1?(t=1,e=a/4):e=a*Math.asin(1/t)/(2*Math.PI),(r*=2)<1?-.5*(t*Math.pow(2,10*(r-=1))*Math.sin((r-e)*(2*Math.PI)/a)):t*Math.pow(2,-10*(r-=1))*Math.sin((r-e)*(2*Math.PI)/a)*.5+1)},backIn:function(r){var e=1.70158;return r*r*((e+1)*r-e)},backOut:function(r){var e=1.70158;return--r*r*((e+1)*r+e)+1},backInOut:function(r){var e=2.5949095;return(r*=2)<1?.5*(r*r*((e+1)*r-e)):.5*((r-=2)*r*((e+1)*r+e)+2)},bounceIn:function(r){return 1-Uf.bounceOut(1-r)},bounceOut:function(r){return r<1/2.75?7.5625*r*r:r<2/2.75?7.5625*(r-=1.5/2.75)*r+.75:r<2.5/2.75?7.5625*(r-=2.25/2.75)*r+.9375:7.5625*(r-=2.625/2.75)*r+.984375},bounceInOut:function(r){return r<.5?Uf.bounceIn(r*2)*.5:Uf.bounceOut(r*2-1)*.5+.5}},bd=Math.pow,bo=Math.sqrt,Wp=1e-8,ZN=1e-4,GC=bo(3),wd=1/3,An=ol(),za=ol(),Cu=ol();function go(r){return r>-Wp&&rWp||r<-Wp}function tr(r,e,t,a,n){var i=1-n;return i*i*(i*r+3*n*e)+n*n*(n*a+3*i*t)}function HC(r,e,t,a,n){var i=1-n;return 3*(((e-r)*i+2*(t-e)*n)*i+(a-t)*n*n)}function qp(r,e,t,a,n,i){var o=a+3*(e-t)-r,s=3*(t-e*2+r),l=3*(e-r),u=r-n,f=s*s-3*o*l,v=s*l-9*o*u,d=l*l-3*s*u,p=0;if(go(f)&&go(v))if(go(s))i[0]=0;else{var y=-l/s;y>=0&&y<=1&&(i[p++]=y)}else{var m=v*v-4*f*d;if(go(m)){var _=v/f,y=-s/o+_,S=-_/2;y>=0&&y<=1&&(i[p++]=y),S>=0&&S<=1&&(i[p++]=S)}else if(m>0){var b=bo(m),w=f*s+1.5*o*(-v+b),A=f*s+1.5*o*(-v-b);w<0?w=-bd(-w,wd):w=bd(w,wd),A<0?A=-bd(-A,wd):A=bd(A,wd);var y=(-s-(w+A))/(3*o);y>=0&&y<=1&&(i[p++]=y)}else{var M=(2*f*s-3*o*v)/(2*bo(f*f*f)),C=Math.acos(M)/3,L=bo(f),E=Math.cos(C),y=(-s-2*L*E)/(3*o),S=(-s+L*(E+GC*Math.sin(C)))/(3*o),R=(-s+L*(E-GC*Math.sin(C)))/(3*o);y>=0&&y<=1&&(i[p++]=y),S>=0&&S<=1&&(i[p++]=S),R>=0&&R<=1&&(i[p++]=R)}}return p}function qN(r,e,t,a,n){var i=6*t-12*e+6*r,o=9*e+3*a-3*r-9*t,s=3*e-3*r,l=0;if(go(o)){if(WN(i)){var u=-s/i;u>=0&&u<=1&&(n[l++]=u)}}else{var f=i*i-4*o*s;if(go(f))n[0]=-i/(2*o);else if(f>0){var v=bo(f),u=(-i+v)/(2*o),d=(-i-v)/(2*o);u>=0&&u<=1&&(n[l++]=u),d>=0&&d<=1&&(n[l++]=d)}}return l}function Lo(r,e,t,a,n,i){var o=(e-r)*n+r,s=(t-e)*n+e,l=(a-t)*n+t,u=(s-o)*n+o,f=(l-s)*n+s,v=(f-u)*n+u;i[0]=r,i[1]=o,i[2]=u,i[3]=v,i[4]=v,i[5]=f,i[6]=l,i[7]=a}function $N(r,e,t,a,n,i,o,s,l,u,f){var v,d=.005,p=1/0,y,m,_,S;An[0]=l,An[1]=u;for(var b=0;b<1;b+=.05)za[0]=tr(r,t,n,o,b),za[1]=tr(e,a,i,s,b),_=Fs(An,za),_=0&&_=0&&u<=1&&(n[l++]=u)}}else{var f=o*o-4*i*s;if(go(f)){var u=-o/(2*i);u>=0&&u<=1&&(n[l++]=u)}else if(f>0){var v=bo(f),u=(-o+v)/(2*i),d=(-o-v)/(2*i);u>=0&&u<=1&&(n[l++]=u),d>=0&&d<=1&&(n[l++]=d)}}return l}function KN(r,e,t){var a=r+t-2*e;return a===0?.5:(r-e)/a}function ih(r,e,t,a,n){var i=(e-r)*a+r,o=(t-e)*a+e,s=(o-i)*a+i;n[0]=r,n[1]=i,n[2]=s,n[3]=s,n[4]=o,n[5]=t}function QN(r,e,t,a,n,i,o,s,l){var u,f=.005,v=1/0;An[0]=o,An[1]=s;for(var d=0;d<1;d+=.05){za[0]=cr(r,t,n,d),za[1]=cr(e,a,i,d);var p=Fs(An,za);p=0&&p=1?1:qp(0,a,i,1,l,s)&&tr(0,n,o,1,s[0])}}}var OG=(function(){function r(e){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=e.life||1e3,this._delay=e.delay||0,this.loop=e.loop||!1,this.onframe=e.onframe||Ge,this.ondestroy=e.ondestroy||Ge,this.onrestart=e.onrestart||Ge,e.easing&&this.setEasing(e.easing)}return r.prototype.step=function(e,t){if(this._inited||(this._startTime=e+this._delay,this._inited=!0),this._paused){this._pausedTime+=t;return}var a=this._life,n=e-this._startTime-this._pausedTime,i=n/a;i<0&&(i=0),i=Math.min(i,1);var o=this.easingFunc,s=o?o(i):i;if(this.onframe(s),i===1)if(this.loop){var l=n%a;this._startTime=e-l,this._pausedTime=0,this.onrestart()}else return!0;return!1},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){this._paused=!1},r.prototype.setEasing=function(e){this.easing=e,this.easingFunc=bt(e)?e:Uf[e]||xb(e)},r})(),JN=(function(){function r(e){this.value=e}return r})(),zG=(function(){function r(){this._len=0}return r.prototype.insert=function(e){var t=new JN(e);return this.insertEntry(t),t},r.prototype.insertEntry=function(e){this.head?(this.tail.next=e,e.prev=this.tail,e.next=null,this.tail=e):this.head=this.tail=e,this._len++},r.prototype.remove=function(e){var t=e.prev,a=e.next;t?t.next=a:this.head=a,a?a.prev=t:this.tail=t,e.next=e.prev=null,this._len--},r.prototype.len=function(){return this._len},r.prototype.clear=function(){this.head=this.tail=null,this._len=0},r})(),Ih=(function(){function r(e){this._list=new zG,this._maxSize=10,this._map={},this._maxSize=e}return r.prototype.put=function(e,t){var a=this._list,n=this._map,i=null;if(n[e]==null){var o=a.len(),s=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var l=a.head;a.remove(l),delete n[l.key],i=l.value,this._lastRemovedEntry=l}s?s.value=t:s=new JN(t),s.key=e,a.insertEntry(s),n[e]=s}return i},r.prototype.get=function(e){var t=this._map[e],a=this._list;if(t!=null)return t!==a.tail&&(a.remove(t),a.insertEntry(t)),t.value},r.prototype.clear=function(){this._list.clear(),this._map={}},r.prototype.len=function(){return this._list.len()},r})(),UC={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function on(r){return r=Math.round(r),r<0?0:r>255?255:r}function kG(r){return r=Math.round(r),r<0?0:r>360?360:r}function oh(r){return r<0?0:r>1?1:r}function e1(r){var e=r;return e.length&&e.charAt(e.length-1)==="%"?on(parseFloat(e)/100*255):on(parseInt(e,10))}function js(r){var e=r;return e.length&&e.charAt(e.length-1)==="%"?oh(parseFloat(e)/100):oh(parseFloat(e))}function r1(r,e,t){return t<0?t+=1:t>1&&(t-=1),t*6<1?r+(e-r)*t*6:t*2<1?e:t*3<2?r+(e-r)*(2/3-t)*6:r}function yo(r,e,t){return r+(e-r)*t}function Ra(r,e,t,a,n){return r[0]=e,r[1]=t,r[2]=a,r[3]=n,r}function Rx(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r}var t3=new Ih(20),Td=null;function Ql(r,e){Td&&Rx(Td,e),Td=t3.put(r,Td||e.slice())}function ha(r,e){if(r){e=e||[];var t=t3.get(r);if(t)return Rx(e,t);r=r+"";var a=r.replace(/ /g,"").toLowerCase();if(a in UC)return Rx(e,UC[a]),Ql(r,e),e;var n=a.length;if(a.charAt(0)==="#"){if(n===4||n===5){var i=parseInt(a.slice(1,4),16);if(!(i>=0&&i<=4095)){Ra(e,0,0,0,1);return}return Ra(e,(i&3840)>>4|(i&3840)>>8,i&240|(i&240)>>4,i&15|(i&15)<<4,n===5?parseInt(a.slice(4),16)/15:1),Ql(r,e),e}else if(n===7||n===9){var i=parseInt(a.slice(1,7),16);if(!(i>=0&&i<=16777215)){Ra(e,0,0,0,1);return}return Ra(e,(i&16711680)>>16,(i&65280)>>8,i&255,n===9?parseInt(a.slice(7),16)/255:1),Ql(r,e),e}return}var o=a.indexOf("("),s=a.indexOf(")");if(o!==-1&&s+1===n){var l=a.substr(0,o),u=a.substr(o+1,s-(o+1)).split(","),f=1;switch(l){case"rgba":if(u.length!==4)return u.length===3?Ra(e,+u[0],+u[1],+u[2],1):Ra(e,0,0,0,1);f=js(u.pop());case"rgb":if(u.length>=3)return Ra(e,e1(u[0]),e1(u[1]),e1(u[2]),u.length===3?f:js(u[3])),Ql(r,e),e;Ra(e,0,0,0,1);return;case"hsla":if(u.length!==4){Ra(e,0,0,0,1);return}return u[3]=js(u[3]),Ix(u,e),Ql(r,e),e;case"hsl":if(u.length!==3){Ra(e,0,0,0,1);return}return Ix(u,e),Ql(r,e),e;default:return}}Ra(e,0,0,0,1)}}function Ix(r,e){var t=(parseFloat(r[0])%360+360)%360/360,a=js(r[1]),n=js(r[2]),i=n<=.5?n*(a+1):n+a-n*a,o=n*2-i;return e=e||[],Ra(e,on(r1(o,i,t+1/3)*255),on(r1(o,i,t)*255),on(r1(o,i,t-1/3)*255),1),r.length===4&&(e[3]=r[3]),e}function BG(r){if(r){var e=r[0]/255,t=r[1]/255,a=r[2]/255,n=Math.min(e,t,a),i=Math.max(e,t,a),o=i-n,s=(i+n)/2,l,u;if(o===0)l=0,u=0;else{s<.5?u=o/(i+n):u=o/(2-i-n);var f=((i-e)/6+o/2)/o,v=((i-t)/6+o/2)/o,d=((i-a)/6+o/2)/o;e===i?l=d-v:t===i?l=1/3+f-d:a===i&&(l=2/3+v-f),l<0&&(l+=1),l>1&&(l-=1)}var p=[l*360,u,s];return r[3]!=null&&p.push(r[3]),p}}function Nx(r,e){var t=ha(r);if(t){for(var a=0;a<3;a++)e<0?t[a]=t[a]*(1-e)|0:t[a]=(255-t[a])*e+t[a]|0,t[a]>255?t[a]=255:t[a]<0&&(t[a]=0);return di(t,t.length===4?"rgba":"rgb")}}function a1(r,e,t){if(!(!(e&&e.length)||!(r>=0&&r<=1))){t=t||[];var a=r*(e.length-1),n=Math.floor(a),i=Math.ceil(a),o=e[n],s=e[i],l=a-n;return t[0]=on(yo(o[0],s[0],l)),t[1]=on(yo(o[1],s[1],l)),t[2]=on(yo(o[2],s[2],l)),t[3]=oh(yo(o[3],s[3],l)),t}}function VG(r,e,t){if(!(!(e&&e.length)||!(r>=0&&r<=1))){var a=r*(e.length-1),n=Math.floor(a),i=Math.ceil(a),o=ha(e[n]),s=ha(e[i]),l=a-n,u=di([on(yo(o[0],s[0],l)),on(yo(o[1],s[1],l)),on(yo(o[2],s[2],l)),oh(yo(o[3],s[3],l))],"rgba");return t?{color:u,leftIndex:n,rightIndex:i,value:a}:u}}function Ff(r,e,t,a){var n=ha(r);if(r)return n=BG(n),e!=null&&(n[0]=kG(e)),t!=null&&(n[1]=js(t)),a!=null&&(n[2]=js(a)),di(Ix(n),"rgba")}function $p(r,e){var t=ha(r);if(t&&e!=null)return t[3]=oh(e),di(t,"rgba")}function di(r,e){if(!(!r||!r.length)){var t=r[0]+","+r[1]+","+r[2];return(e==="rgba"||e==="hsva"||e==="hsla")&&(t+=","+r[3]),e+"("+t+")"}}function Kp(r,e){var t=ha(r);return t?(.299*t[0]+.587*t[1]+.114*t[2])*t[3]/255+(1-t[3])*e:0}var Qp=Math.round;function sh(r){var e;if(!r||r==="transparent")r="none";else if(typeof r=="string"&&r.indexOf("rgba")>-1){var t=ha(r);t&&(r="rgb("+t[0]+","+t[1]+","+t[2]+")",e=t[3])}return{color:r,opacity:e??1}}var FC=1e-4;function mo(r){return r-FC}function Ad(r){return Qp(r*1e3)/1e3}function Px(r){return Qp(r*1e4)/1e4}function GG(r){return"matrix("+Ad(r[0])+","+Ad(r[1])+","+Ad(r[2])+","+Ad(r[3])+","+Px(r[4])+","+Px(r[5])+")"}var HG={left:"start",right:"end",center:"middle",middle:"middle"};function UG(r,e,t){return t==="top"?r+=e/2:t==="bottom"&&(r-=e/2),r}function FG(r){return r&&(r.shadowBlur||r.shadowOffsetX||r.shadowOffsetY)}function jG(r){var e=r.style,t=r.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),t[0],t[1]].join(",")}function e3(r){return r&&!!r.image}function YG(r){return r&&!!r.svgElement}function Sb(r){return e3(r)||YG(r)}function r3(r){return r.type==="linear"}function a3(r){return r.type==="radial"}function n3(r){return r&&(r.type==="linear"||r.type==="radial")}function Xg(r){return"url(#"+r+")"}function i3(r){var e=r.getGlobalScale(),t=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(t)/Math.log(10)),1)}function o3(r){var e=r.x||0,t=r.y||0,a=(r.rotation||0)*wp,n=Ot(r.scaleX,1),i=Ot(r.scaleY,1),o=r.skewX||0,s=r.skewY||0,l=[];return(e||t)&&l.push("translate("+e+"px,"+t+"px)"),a&&l.push("rotate("+a+")"),(n!==1||i!==1)&&l.push("scale("+n+","+i+")"),(o||s)&&l.push("skew("+Qp(o*wp)+"deg, "+Qp(s*wp)+"deg)"),l.join(" ")}var XG=(function(){return Ft.hasGlobalWindow&&bt(window.btoa)?function(r){return window.btoa(unescape(encodeURIComponent(r)))}:typeof Buffer<"u"?function(r){return Buffer.from(r).toString("base64")}:function(r){return null}})(),Ox=Array.prototype.slice;function li(r,e,t){return(e-r)*t+r}function n1(r,e,t,a){for(var n=e.length,i=0;ia?e:r,i=Math.min(t,a),o=n[i-1]||{color:[0,0,0,0],offset:0},s=i;so;if(s)a.length=o;else for(var l=i;l=1},r.prototype.getAdditiveTrack=function(){return this._additiveTrack},r.prototype.addKeyframe=function(e,t,a){this._needsSort=!0;var n=this.keyframes,i=n.length,o=!1,s=YC,l=t;if(Dr(t)){var u=$G(t);s=u,(u===1&&!Qt(t[0])||u===2&&!Qt(t[0][0]))&&(o=!0)}else if(Qt(t)&&!nh(t))s=Cd;else if(vt(t))if(!isNaN(+t))s=Cd;else{var f=ha(t);f&&(l=f,s=Ef)}else if(Fg(t)){var v=et({},l);v.colorStops=st(t.colorStops,function(p){return{offset:p.offset,color:ha(p.color)}}),r3(t)?s=zx:a3(t)&&(s=kx),l=v}i===0?this.valType=s:(s!==this.valType||s===YC)&&(o=!0),this.discrete=this.discrete||o;var d={time:e,value:l,rawValue:t,percent:0};return a&&(d.easing=a,d.easingFunc=bt(a)?a:Uf[a]||xb(a)),n.push(d),d},r.prototype.prepare=function(e,t){var a=this.keyframes;this._needsSort&&a.sort(function(m,_){return m.time-_.time});for(var n=this.valType,i=a.length,o=a[i-1],s=this.discrete,l=Md(n),u=XC(n),f=0;f=0&&!(o[f].percent<=t);f--);f=d(f,s-2)}else{for(f=v;ft);f++);f=d(f-1,s-2)}y=o[f+1],p=o[f]}if(p&&y){this._lastFr=f,this._lastFrP=t;var _=y.percent-p.percent,S=_===0?1:d((t-p.percent)/_,1);y.easingFunc&&(S=y.easingFunc(S));var b=a?this._additiveValue:u?af:e[l];if((Md(i)||u)&&!b&&(b=this._additiveValue=[]),this.discrete)e[l]=S<1?p.rawValue:y.rawValue;else if(Md(i))i===Mp?n1(b,p[n],y[n],S):ZG(b,p[n],y[n],S);else if(XC(i)){var w=p[n],A=y[n],M=i===zx;e[l]={type:M?"linear":"radial",x:li(w.x,A.x,S),y:li(w.y,A.y,S),colorStops:st(w.colorStops,function(L,E){var R=A.colorStops[E];return{offset:li(L.offset,R.offset,S),color:Cp(n1([],L.color,R.color,S))}}),global:A.global},M?(e[l].x2=li(w.x2,A.x2,S),e[l].y2=li(w.y2,A.y2,S)):e[l].r=li(w.r,A.r,S)}else if(u)n1(b,p[n],y[n],S),a||(e[l]=Cp(b));else{var C=li(p[n],y[n],S);a?this._additiveValue=C:e[l]=C}a&&this._addToTarget(e)}}},r.prototype._addToTarget=function(e){var t=this.valType,a=this.propName,n=this._additiveValue;t===Cd?e[a]=e[a]+n:t===Ef?(ha(e[a],af),Dd(af,af,n,1),e[a]=Cp(af)):t===Mp?Dd(e[a],e[a],n,1):t===s3&&jC(e[a],e[a],n,1)},r})(),bb=(function(){function r(e,t,a,n){if(this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=e,this._loop=t,t&&n){vb("Can' use additive animation on looped animation.");return}this._additiveAnimators=n,this._allowDiscrete=a}return r.prototype.getMaxTime=function(){return this._maxTime},r.prototype.getDelay=function(){return this._delay},r.prototype.getLoop=function(){return this._loop},r.prototype.getTarget=function(){return this._target},r.prototype.changeTarget=function(e){this._target=e},r.prototype.when=function(e,t,a){return this.whenWithKeys(e,t,Yt(t),a)},r.prototype.whenWithKeys=function(e,t,a,n){for(var i=this._tracks,o=0;o0&&l.addKeyframe(0,jf(u),n),this._trackKeys.push(s)}l.addKeyframe(e,jf(t[s]),n)}return this._maxTime=Math.max(this._maxTime,e),this},r.prototype.pause=function(){this._clip.pause(),this._paused=!0},r.prototype.resume=function(){this._clip.resume(),this._paused=!1},r.prototype.isPaused=function(){return!!this._paused},r.prototype.duration=function(e){return this._maxTime=e,this._force=!0,this},r.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var e=this._doneCbs;if(e)for(var t=e.length,a=0;a0)){this._started=1;for(var t=this,a=[],n=this._maxTime||0,i=0;i1){var s=o.pop();i.addKeyframe(s.time,e[n]),i.prepare(this._maxTime,i.getAdditiveTrack())}}}},r})();function wu(){return new Date().getTime()}var QG=(function(r){De(e,r);function e(t){var a=r.call(this)||this;return a._running=!1,a._time=0,a._pausedTime=0,a._pauseStart=0,a._paused=!1,t=t||{},a.stage=t.stage||{},a}return e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._head?(this._tail.next=t,t.prev=this._tail,t.next=null,this._tail=t):this._head=this._tail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var a=t.getClip();a&&this.addClip(a)},e.prototype.removeClip=function(t){if(t.animation){var a=t.prev,n=t.next;a?a.next=n:this._head=n,n?n.prev=a:this._tail=a,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var a=t.getClip();a&&this.removeClip(a),t.animation=null},e.prototype.update=function(t){for(var a=wu()-this._pausedTime,n=a-this._time,i=this._head;i;){var o=i.next,s=i.step(a,n);s&&(i.ondestroy(),this.removeClip(i)),i=o}this._time=a,t||(this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;this._running=!0;function a(){t._running&&(Zp(a),!t._paused&&t.update())}Zp(a)},e.prototype.start=function(){this._running||(this._time=wu(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=wu(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=wu()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var t=this._head;t;){var a=t.next;t.prev=t.next=t.animation=null,t=a}this._head=this._tail=null},e.prototype.isFinished=function(){return this._head==null},e.prototype.animate=function(t,a){a=a||{},this.start();var n=new bb(t,a.loop);return this.addAnimator(n),n},e})(ja),JG=300,i1=Ft.domSupported,o1=(function(){var r=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],e=["touchstart","touchend","touchmove"],t={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},a=st(r,function(n){var i=n.replace("mouse","pointer");return t.hasOwnProperty(i)?i:n});return{mouse:r,touch:e,pointer:a}})(),ZC={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},WC=!1;function Bx(r){var e=r.pointerType;return e==="pen"||e==="touch"}function t8(r){r.touching=!0,r.touchTimer!=null&&(clearTimeout(r.touchTimer),r.touchTimer=null),r.touchTimer=setTimeout(function(){r.touching=!1,r.touchTimer=null},700)}function s1(r){r&&(r.zrByTouch=!0)}function e8(r,e){return Ia(r.dom,new r8(r,e),!0)}function l3(r,e){for(var t=e,a=!1;t&&t.nodeType!==9&&!(a=t.domBelongToZr||t!==e&&t===r.painterRoot);)t=t.parentNode;return a}var r8=(function(){function r(e,t){this.stopPropagation=Ge,this.stopImmediatePropagation=Ge,this.preventDefault=Ge,this.type=t.type,this.target=this.currentTarget=e.dom,this.pointerType=t.pointerType,this.clientX=t.clientX,this.clientY=t.clientY}return r})(),Ja={mousedown:function(r){r=Ia(this.dom,r),this.__mayPointerCapture=[r.zrX,r.zrY],this.trigger("mousedown",r)},mousemove:function(r){r=Ia(this.dom,r);var e=this.__mayPointerCapture;e&&(r.zrX!==e[0]||r.zrY!==e[1])&&this.__togglePointerCapture(!0),this.trigger("mousemove",r)},mouseup:function(r){r=Ia(this.dom,r),this.__togglePointerCapture(!1),this.trigger("mouseup",r)},mouseout:function(r){r=Ia(this.dom,r);var e=r.toElement||r.relatedTarget;l3(this,e)||(this.__pointerCapturing&&(r.zrEventControl="no_globalout"),this.trigger("mouseout",r))},wheel:function(r){WC=!0,r=Ia(this.dom,r),this.trigger("mousewheel",r)},mousewheel:function(r){WC||(r=Ia(this.dom,r),this.trigger("mousewheel",r))},touchstart:function(r){r=Ia(this.dom,r),s1(r),this.__lastTouchMoment=new Date,this.handler.processGesture(r,"start"),Ja.mousemove.call(this,r),Ja.mousedown.call(this,r)},touchmove:function(r){r=Ia(this.dom,r),s1(r),this.handler.processGesture(r,"change"),Ja.mousemove.call(this,r)},touchend:function(r){r=Ia(this.dom,r),s1(r),this.handler.processGesture(r,"end"),Ja.mouseup.call(this,r),+new Date-+this.__lastTouchMomentKC||r<-KC}var os=[],Jl=[],u1=Ua(),c1=Math.abs,ci=(function(){function r(){}return r.prototype.getLocalTransform=function(e){return r.getLocalTransform(this,e)},r.prototype.setPosition=function(e){this.x=e[0],this.y=e[1]},r.prototype.setScale=function(e){this.scaleX=e[0],this.scaleY=e[1]},r.prototype.setSkew=function(e){this.skewX=e[0],this.skewY=e[1]},r.prototype.setOrigin=function(e){this.originX=e[0],this.originY=e[1]},r.prototype.needLocalTransform=function(){return is(this.rotation)||is(this.x)||is(this.y)||is(this.scaleX-1)||is(this.scaleY-1)||is(this.skewX)||is(this.skewY)},r.prototype.updateTransform=function(){var e=this.parent&&this.parent.transform,t=this.needLocalTransform(),a=this.transform;if(!(t||e)){a&&($C(a),this.invTransform=null);return}a=a||Ua(),t?this.getLocalTransform(a):$C(a),e&&(t?vi(a,e,a):mb(a,e)),this.transform=a,this._resolveGlobalScaleRatio(a)},r.prototype._resolveGlobalScaleRatio=function(e){var t=this.globalScaleRatio;if(t!=null&&t!==1){this.getGlobalScale(os);var a=os[0]<0?-1:1,n=os[1]<0?-1:1,i=((os[0]-a)*t+a)/os[0]||0,o=((os[1]-n)*t+n)/os[1]||0;e[0]*=i,e[1]*=i,e[2]*=o,e[3]*=o}this.invTransform=this.invTransform||Ua(),ju(this.invTransform,e)},r.prototype.getComputedTransform=function(){for(var e=this,t=[];e;)t.push(e),e=e.parent;for(;e=t.pop();)e.updateTransform();return this.transform},r.prototype.setLocalTransform=function(e){if(e){var t=e[0]*e[0]+e[1]*e[1],a=e[2]*e[2]+e[3]*e[3],n=Math.atan2(e[1],e[0]),i=Math.PI/2+n-Math.atan2(e[3],e[2]);a=Math.sqrt(a)*Math.cos(i),t=Math.sqrt(t),this.skewX=i,this.skewY=0,this.rotation=-n,this.x=+e[4],this.y=+e[5],this.scaleX=t,this.scaleY=a,this.originX=0,this.originY=0}},r.prototype.decomposeTransform=function(){if(this.transform){var e=this.parent,t=this.transform;e&&e.transform&&(vi(Jl,e.invTransform,t),t=Jl);var a=this.originX,n=this.originY;(a||n)&&(u1[4]=a,u1[5]=n,vi(Jl,t,u1),Jl[4]-=a,Jl[5]-=n,t=Jl),this.setLocalTransform(t)}},r.prototype.getGlobalScale=function(e){var t=this.transform;return e=e||[],t?(e[0]=Math.sqrt(t[0]*t[0]+t[1]*t[1]),e[1]=Math.sqrt(t[2]*t[2]+t[3]*t[3]),t[0]<0&&(e[0]=-e[0]),t[3]<0&&(e[1]=-e[1]),e):(e[0]=1,e[1]=1,e)},r.prototype.transformCoordToLocal=function(e,t){var a=[e,t],n=this.invTransform;return n&&_r(a,a,n),a},r.prototype.transformCoordToGlobal=function(e,t){var a=[e,t],n=this.transform;return n&&_r(a,a,n),a},r.prototype.getLineScale=function(){var e=this.transform;return e&&c1(e[0]-1)>1e-10&&c1(e[3]-1)>1e-10?Math.sqrt(c1(e[0]*e[3]-e[2]*e[1])):1},r.prototype.copyTransform=function(e){c3(this,e)},r.getLocalTransform=function(e,t){t=t||[];var a=e.originX||0,n=e.originY||0,i=e.scaleX,o=e.scaleY,s=e.anchorX,l=e.anchorY,u=e.rotation||0,f=e.x,v=e.y,d=e.skewX?Math.tan(e.skewX):0,p=e.skewY?Math.tan(-e.skewY):0;if(a||n||s||l){var y=a+s,m=n+l;t[4]=-y*i-d*m*o,t[5]=-m*o-p*y*i}else t[4]=t[5]=0;return t[0]=i,t[3]=o,t[1]=p*i,t[2]=d*o,u&&sl(t,t,u),t[4]+=a+f,t[5]+=n+v,t},r.initDefaultProps=(function(){var e=r.prototype;e.scaleX=e.scaleY=e.globalScaleRatio=1,e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0})(),r})(),On=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function c3(r,e){for(var t=0;t=0?parseFloat(r)/100*e:parseFloat(r):r}function tg(r,e,t){var a=e.position||"inside",n=e.distance!=null?e.distance:5,i=t.height,o=t.width,s=i/2,l=t.x,u=t.y,f="left",v="top";if(a instanceof Array)l+=ln(a[0],t.width),u+=ln(a[1],t.height),f=null,v=null;else switch(a){case"left":l-=n,u+=s,f="right",v="middle";break;case"right":l+=n+o,u+=s,v="middle";break;case"top":l+=o/2,u-=n,f="center",v="bottom";break;case"bottom":l+=o/2,u+=i+n,f="center";break;case"inside":l+=o/2,u+=s,f="center",v="middle";break;case"insideLeft":l+=n,u+=s,v="middle";break;case"insideRight":l+=o-n,u+=s,f="right",v="middle";break;case"insideTop":l+=o/2,u+=n,f="center";break;case"insideBottom":l+=o/2,u+=i-n,f="center",v="bottom";break;case"insideTopLeft":l+=n,u+=n;break;case"insideTopRight":l+=o-n,u+=n,f="right";break;case"insideBottomLeft":l+=n,u+=i-n,v="bottom";break;case"insideBottomRight":l+=o-n,u+=i-n,f="right",v="bottom";break}return r=r||{},r.x=l,r.y=u,r.align=f,r.verticalAlign=v,r}var f1="__zr_normal__",h1=On.concat(["ignore"]),s8=Nn(On,function(r,e){return r[e]=!0,r},{ignore:!1}),tu={},l8=new kt(0,0,0,0),Wg=(function(){function r(e){this.id=BN(),this.animators=[],this.currentStates=[],this.states={},this._init(e)}return r.prototype._init=function(e){this.attr(e)},r.prototype.drift=function(e,t,a){switch(this.draggable){case"horizontal":t=0;break;case"vertical":e=0;break}var n=this.transform;n||(n=this.transform=[1,0,0,1,0,0]),n[4]+=e,n[5]+=t,this.decomposeTransform(),this.markRedraw()},r.prototype.beforeUpdate=function(){},r.prototype.afterUpdate=function(){},r.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},r.prototype.updateInnerText=function(e){var t=this._textContent;if(t&&(!t.ignore||e)){this.textConfig||(this.textConfig={});var a=this.textConfig,n=a.local,i=t.innerTransformable,o=void 0,s=void 0,l=!1;i.parent=n?this:null;var u=!1;if(i.copyTransform(t),a.position!=null){var f=l8;a.layoutRect?f.copy(a.layoutRect):f.copy(this.getBoundingRect()),n||f.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(tu,a,f):tg(tu,a,f),i.x=tu.x,i.y=tu.y,o=tu.align,s=tu.verticalAlign;var v=a.origin;if(v&&a.rotation!=null){var d=void 0,p=void 0;v==="center"?(d=f.width*.5,p=f.height*.5):(d=ln(v[0],f.width),p=ln(v[1],f.height)),u=!0,i.originX=-i.x+d+(n?0:f.x),i.originY=-i.y+p+(n?0:f.y)}}a.rotation!=null&&(i.rotation=a.rotation);var y=a.offset;y&&(i.x+=y[0],i.y+=y[1],u||(i.originX=-y[0],i.originY=-y[1]));var m=a.inside==null?typeof a.position=="string"&&a.position.indexOf("inside")>=0:a.inside,_=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),S=void 0,b=void 0,w=void 0;m&&this.canBeInsideText()?(S=a.insideFill,b=a.insideStroke,(S==null||S==="auto")&&(S=this.getInsideTextFill()),(b==null||b==="auto")&&(b=this.getInsideTextStroke(S),w=!0)):(S=a.outsideFill,b=a.outsideStroke,(S==null||S==="auto")&&(S=this.getOutsideFill()),(b==null||b==="auto")&&(b=this.getOutsideStroke(S),w=!0)),S=S||"#000",(S!==_.fill||b!==_.stroke||w!==_.autoStroke||o!==_.align||s!==_.verticalAlign)&&(l=!0,_.fill=S,_.stroke=b,_.autoStroke=w,_.align=o,_.verticalAlign=s,t.setDefaultTextStyle(_)),t.__dirty|=fa,l&&t.dirtyStyle(!0)}},r.prototype.canBeInsideText=function(){return!0},r.prototype.getInsideTextFill=function(){return"#fff"},r.prototype.getInsideTextStroke=function(e){return"#000"},r.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?Ux:Hx},r.prototype.getOutsideStroke=function(e){var t=this.__zr&&this.__zr.getBackgroundColor(),a=typeof t=="string"&&ha(t);a||(a=[255,255,255,1]);for(var n=a[3],i=this.__zr.isDarkMode(),o=0;o<3;o++)a[o]=a[o]*n+(i?0:255)*(1-n);return a[3]=1,di(a,"rgba")},r.prototype.traverse=function(e,t){},r.prototype.attrKV=function(e,t){e==="textConfig"?this.setTextConfig(t):e==="textContent"?this.setTextContent(t):e==="clipPath"?this.setClipPath(t):e==="extra"?(this.extra=this.extra||{},et(this.extra,t)):this[e]=t},r.prototype.hide=function(){this.ignore=!0,this.markRedraw()},r.prototype.show=function(){this.ignore=!1,this.markRedraw()},r.prototype.attr=function(e,t){if(typeof e=="string")this.attrKV(e,t);else if(Tt(e))for(var a=e,n=Yt(a),i=0;i0},r.prototype.getState=function(e){return this.states[e]},r.prototype.ensureState=function(e){var t=this.states;return t[e]||(t[e]={}),t[e]},r.prototype.clearStates=function(e){this.useState(f1,!1,e)},r.prototype.useState=function(e,t,a,n){var i=e===f1,o=this.hasState();if(!(!o&&i)){var s=this.currentStates,l=this.stateTransition;if(!(Vt(s,e)>=0&&(t||s.length===1))){var u;if(this.stateProxy&&!i&&(u=this.stateProxy(e)),u||(u=this.states&&this.states[e]),!u&&!i){vb("State "+e+" not exists.");return}i||this.saveCurrentToNormalState(u);var f=!!(u&&u.hoverLayer||n);f&&this._toggleHoverLayerFlag(!0),this._applyStateObj(e,u,this._normalState,t,!a&&!this.__inHover&&l&&l.duration>0,l);var v=this._textContent,d=this._textGuide;return v&&v.useState(e,t,a,f),d&&d.useState(e,t,a,f),i?(this.currentStates=[],this._normalState={}):t?this.currentStates.push(e):this.currentStates=[e],this._updateAnimationTargets(),this.markRedraw(),!f&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~fa),u}}},r.prototype.useStates=function(e,t,a){if(!e.length)this.clearStates();else{var n=[],i=this.currentStates,o=e.length,s=o===i.length;if(s){for(var l=0;l0,y);var m=this._textContent,_=this._textGuide;m&&m.useStates(e,t,d),_&&_.useStates(e,t,d),this._updateAnimationTargets(),this.currentStates=e.slice(),this.markRedraw(),!d&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~fa)}},r.prototype._updateAnimationTargets=function(){for(var e=0;e=0){var a=this.currentStates.slice();a.splice(t,1),this.useStates(a)}},r.prototype.replaceState=function(e,t,a){var n=this.currentStates.slice(),i=Vt(n,e),o=Vt(n,t)>=0;i>=0?o?n.splice(i,1):n[i]=t:a&&!o&&n.push(t),this.useStates(n)},r.prototype.toggleState=function(e,t){t?this.useState(e,!0):this.removeState(e)},r.prototype._mergeStates=function(e){for(var t={},a,n=0;n=0&&i.splice(o,1)}),this.animators.push(e),a&&a.animation.addAnimator(e),a&&a.wakeUp()},r.prototype.updateDuringAnimation=function(e){this.markRedraw()},r.prototype.stopAnimation=function(e,t){for(var a=this.animators,n=a.length,i=[],o=0;o0&&t.during&&i[0].during(function(y,m){t.during(m)});for(var d=0;d0||n.force&&!o.length){var E=void 0,R=void 0,N=void 0;if(s){R={},d&&(E={});for(var A=0;A=0&&(n.splice(i,0,t),this._doAdd(t))}return this},e.prototype.replace=function(t,a){var n=Vt(this._children,t);return n>=0&&this.replaceAt(a,n),this},e.prototype.replaceAt=function(t,a){var n=this._children,i=n[a];if(t&&t!==this&&t.parent!==this&&t!==i){n[a]=t,i.parent=null;var o=this.__zr;o&&i.removeSelfFromZr(o),this._doAdd(t)}return this},e.prototype._doAdd=function(t){t.parent&&t.parent.remove(t),t.parent=this;var a=this.__zr;a&&a!==t.__zr&&t.addSelfToZr(a),a&&a.refresh()},e.prototype.remove=function(t){var a=this.__zr,n=this._children,i=Vt(n,t);return i<0?this:(n.splice(i,1),t.parent=null,a&&t.removeSelfFromZr(a),a&&a.refresh(),this)},e.prototype.removeAll=function(){for(var t=this._children,a=this.__zr,n=0;n0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},r.prototype.setSleepAfterStill=function(e){this._sleepAfterStill=e},r.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},r.prototype.refreshHover=function(){this._needsRefreshHover=!0},r.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.getType()==="canvas"&&this.painter.refreshHover()},r.prototype.resize=function(e){e=e||{},this.painter.resize(e.width,e.height),this.handler.resize()},r.prototype.clearAnimation=function(){this.animation.clear()},r.prototype.getWidth=function(){return this.painter.getWidth()},r.prototype.getHeight=function(){return this.painter.getHeight()},r.prototype.setCursorStyle=function(e){this.handler.setCursorStyle(e)},r.prototype.findHover=function(e,t){return this.handler.findHover(e,t)},r.prototype.on=function(e,t,a){return this.handler.on(e,t,a),this},r.prototype.off=function(e,t){this.handler.off(e,t)},r.prototype.trigger=function(e,t){this.handler.trigger(e,t)},r.prototype.clear=function(){for(var e=this.storage.getRoots(),t=0;t0){if(r<=n)return o;if(r>=i)return s}else{if(r>=n)return o;if(r<=i)return s}else{if(r===n)return o;if(r===i)return s}return(r-n)/l*u+o}function ft(r,e){switch(r){case"center":case"middle":r="50%";break;case"left":case"top":r="0%";break;case"right":case"bottom":r="100%";break}return vt(r)?y8(r).match(/%$/)?parseFloat(r)/100*e:parseFloat(r):r==null?NaN:+r}function Oe(r,e,t){return e==null&&(e=10),e=Math.min(Math.max(0,e),v3),r=(+r).toFixed(e),t?r:+r}function Ga(r){return r.sort(function(e,t){return e-t}),r}function Cn(r){if(r=+r,isNaN(r))return 0;if(r>1e-14){for(var e=1,t=0;t<15;t++,e*=10)if(Math.round(r*e)/e===r)return t}return m8(r)}function m8(r){var e=r.toString().toLowerCase(),t=e.indexOf("e"),a=t>0?+e.slice(t+1):0,n=t>0?t:e.length,i=e.indexOf("."),o=i<0?0:n-1-i;return Math.max(0,o-a)}function d3(r,e){var t=Math.log,a=Math.LN10,n=Math.floor(t(r[1]-r[0])/a),i=Math.round(t(Math.abs(e[1]-e[0]))/a),o=Math.min(Math.max(-n+i,0),20);return isFinite(o)?o:20}function _8(r,e){var t=Nn(r,function(p,y){return p+(isNaN(y)?0:y)},0);if(t===0)return[];for(var a=Math.pow(10,e),n=st(r,function(p){return(isNaN(p)?0:p)/t*a*100}),i=a*100,o=st(n,function(p){return Math.floor(p)}),s=Nn(o,function(p,y){return p+y},0),l=st(n,function(p,y){return p-o[y]});su&&(u=l[v],f=v);++o[f],l[f]=0,++s}return st(o,function(p){return p/a})}function x8(r,e){var t=Math.max(Cn(r),Cn(e)),a=r+e;return t>v3?a:Oe(a,t)}var rM=9007199254740991;function p3(r){var e=Math.PI*2;return(r%e+e)%e}function eg(r){return r>-eM&&r=10&&e++,e}function g3(r,e){var t=wb(r),a=Math.pow(10,t),n=r/a,i;return n<1.5?i=1:n<2.5?i=2:n<4?i=3:n<7?i=5:i=10,r=i*a,t>=-20?+r.toFixed(t<0?-t:0):r}function p1(r,e){var t=(r.length-1)*e+1,a=Math.floor(t),n=+r[a-1],i=t-a;return i?n+i*(r[a]-n):n}function aM(r){r.sort(function(l,u){return s(l,u,0)?-1:1});for(var e=-1/0,t=1,a=0;a=0||i&&Vt(i,l)<0)){var u=a.getShallow(l,e);u!=null&&(o[r[s][0]]=u)}}return o}}var X8=[["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]],Z8=el(X8),W8=(function(){function r(){}return r.prototype.getAreaStyle=function(e,t){return Z8(this,e,t)},r})(),jx=new Ih(50);function q8(r){if(typeof r=="string"){var e=jx.get(r);return e&&e.image}else return r}function Cb(r,e,t,a,n){if(r)if(typeof r=="string"){if(e&&e.__zrImageSrc===r||!t)return e;var i=jx.get(r),o={hostEl:t,cb:a,cbPayload:n};return i?(e=i.image,!$g(e)&&i.pending.push(o)):(e=Mo.loadImage(r,sM,sM),e.__zrImageSrc=r,jx.put(r,e.__cachedImgObj={image:e,pending:[o]})),e}else return r;else return e}function sM(){var r=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=o;l++)s-=o;var u=va(t,e);return u>s&&(t="",u=0),s=r-u,n.ellipsis=t,n.ellipsisWidth=u,n.contentWidth=s,n.containerWidth=r,n}function L3(r,e){var t=e.containerWidth,a=e.font,n=e.contentWidth;if(!t)return"";var i=va(r,a);if(i<=t)return r;for(var o=0;;o++){if(i<=n||o>=e.maxIterations){r+=e.ellipsis;break}var s=o===0?K8(r,n,e.ascCharWidth,e.cnCharWidth):i>0?Math.floor(r.length*n/i):0;r=r.substr(0,s),i=va(r,a)}return r===""&&(r=e.placeholder),r}function K8(r,e,t,a){for(var n=0,i=0,o=r.length;ip&&u){var y=Math.floor(p/s);v=v.slice(0,y)}if(r&&i&&f!=null)for(var m=M3(f,n,e.ellipsis,{minChar:e.truncateMinChar,placeholder:e.placeholder}),_=0;_s&&y1(t,r.substring(s,u),e,o),y1(t,l[2],e,o,l[1]),s=g1.lastIndex}sn){M>0?(b.tokens=b.tokens.slice(0,M),_(b,A,w),t.lines=t.lines.slice(0,S+1)):t.lines=t.lines.slice(0,S);break t}var k=L.width,G=k==null||k==="auto";if(typeof k=="string"&&k.charAt(k.length-1)==="%")C.percentWidth=k,f.push(C),C.contentWidth=va(C.text,N);else{if(G){var H=L.backgroundColor,F=H&&H.image;F&&(F=q8(F),$g(F)&&(C.width=Math.max(C.width,F.width*O/F.height)))}var B=y&&a!=null?a-A:null;B!=null&&B0&&y+a.accumWidth>a.width&&(f=e.split(` +`),u=!0),a.accumWidth=y}else{var m=E3(e,l,a.width,a.breakAll,a.accumWidth);a.accumWidth=m.accumWidth+p,v=m.linesWidths,f=m.lines}}else f=e.split(` +`);for(var _=0;_=32&&e<=591||e>=880&&e<=4351||e>=4608&&e<=5119||e>=7680&&e<=8303}var aH=Nn(",&?/;] ".split(""),function(r,e){return r[e]=!0,r},{});function nH(r){return rH(r)?!!aH[r]:!0}function E3(r,e,t,a,n){for(var i=[],o=[],s="",l="",u=0,f=0,v=0;vt:n+f+p>t){f?(s||l)&&(y?(s||(s=l,l="",u=0,f=u),i.push(s),o.push(f-u),l+=d,u+=p,s="",f=u):(l&&(s+=l,l="",u=0),i.push(s),o.push(f),s=d,f=p)):y?(i.push(l),o.push(u),l=d,u=p):(i.push(d),o.push(p));continue}f+=p,y?(l+=d,u+=p):(l&&(s+=l,l="",u=0),s+=d)}return!i.length&&!s&&(s=r,l="",u=0),l&&(s+=l),s&&(i.push(s),o.push(f)),i.length===1&&(f+=n),{accumWidth:f,lines:i,linesWidths:o}}var Yx="__zr_style_"+Math.round(Math.random()*10),Ys={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},Kg={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};Ys[Yx]=!0;var uM=["z","z2","invisible"],iH=["invisible"],Fa=(function(r){De(e,r);function e(t){return r.call(this,t)||this}return e.prototype._init=function(t){for(var a=Yt(t),n=0;n1e-4){s[0]=r-t,s[1]=e-a,l[0]=r+t,l[1]=e+a;return}if(Ld[0]=S1(n)*t+r,Ld[1]=x1(n)*a+e,Ed[0]=S1(i)*t+r,Ed[1]=x1(i)*a+e,u(s,Ld,Ed),f(l,Ld,Ed),n=n%ls,n<0&&(n=n+ls),i=i%ls,i<0&&(i=i+ls),n>i&&!o?i+=ls:nn&&(Rd[0]=S1(p)*t+r,Rd[1]=x1(p)*a+e,u(s,Rd,s),f(l,Rd,l))}var pe={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},us=[],cs=[],yn=[],Ji=[],mn=[],_n=[],b1=Math.min,w1=Math.max,fs=Math.cos,hs=Math.sin,ii=Math.abs,Xx=Math.PI,lo=Xx*2,T1=typeof Float32Array<"u",nf=[];function A1(r){var e=Math.round(r/Xx*1e8)/1e8;return e%2*Xx}function R3(r,e){var t=A1(r[0]);t<0&&(t+=lo);var a=t-r[0],n=r[1];n+=a,!e&&n-t>=lo?n=t+lo:e&&t-n>=lo?n=t-lo:!e&&t>n?n=t+(lo-A1(t-n)):e&&t0&&(this._ux=ii(a/Jp/e)||0,this._uy=ii(a/Jp/t)||0)},r.prototype.setDPR=function(e){this.dpr=e},r.prototype.setContext=function(e){this._ctx=e},r.prototype.getContext=function(){return this._ctx},r.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},r.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},r.prototype.moveTo=function(e,t){return this._drawPendingPt(),this.addData(pe.M,e,t),this._ctx&&this._ctx.moveTo(e,t),this._x0=e,this._y0=t,this._xi=e,this._yi=t,this},r.prototype.lineTo=function(e,t){var a=ii(e-this._xi),n=ii(t-this._yi),i=a>this._ux||n>this._uy;if(this.addData(pe.L,e,t),this._ctx&&i&&this._ctx.lineTo(e,t),i)this._xi=e,this._yi=t,this._pendingPtDist=0;else{var o=a*a+n*n;o>this._pendingPtDist&&(this._pendingPtX=e,this._pendingPtY=t,this._pendingPtDist=o)}return this},r.prototype.bezierCurveTo=function(e,t,a,n,i,o){return this._drawPendingPt(),this.addData(pe.C,e,t,a,n,i,o),this._ctx&&this._ctx.bezierCurveTo(e,t,a,n,i,o),this._xi=i,this._yi=o,this},r.prototype.quadraticCurveTo=function(e,t,a,n){return this._drawPendingPt(),this.addData(pe.Q,e,t,a,n),this._ctx&&this._ctx.quadraticCurveTo(e,t,a,n),this._xi=a,this._yi=n,this},r.prototype.arc=function(e,t,a,n,i,o){this._drawPendingPt(),nf[0]=n,nf[1]=i,R3(nf,o),n=nf[0],i=nf[1];var s=i-n;return this.addData(pe.A,e,t,a,a,n,s,0,o?0:1),this._ctx&&this._ctx.arc(e,t,a,n,i,o),this._xi=fs(i)*a+e,this._yi=hs(i)*a+t,this},r.prototype.arcTo=function(e,t,a,n,i){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(e,t,a,n,i),this},r.prototype.rect=function(e,t,a,n){return this._drawPendingPt(),this._ctx&&this._ctx.rect(e,t,a,n),this.addData(pe.R,e,t,a,n),this},r.prototype.closePath=function(){this._drawPendingPt(),this.addData(pe.Z);var e=this._ctx,t=this._x0,a=this._y0;return e&&e.closePath(),this._xi=t,this._yi=a,this},r.prototype.fill=function(e){e&&e.fill(),this.toStatic()},r.prototype.stroke=function(e){e&&e.stroke(),this.toStatic()},r.prototype.len=function(){return this._len},r.prototype.setData=function(e){var t=e.length;!(this.data&&this.data.length===t)&&T1&&(this.data=new Float32Array(t));for(var a=0;af.length&&(this._expandData(),f=this.data);for(var v=0;v0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},r.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var e=[],t=0;t11&&(this.data=new Float32Array(e)))}},r.prototype.getBoundingRect=function(){yn[0]=yn[1]=mn[0]=mn[1]=Number.MAX_VALUE,Ji[0]=Ji[1]=_n[0]=_n[1]=-Number.MAX_VALUE;var e=this.data,t=0,a=0,n=0,i=0,o;for(o=0;oa||ii(w)>n||d===t-1)&&(m=Math.sqrt(b*b+w*w),i=_,o=S);break}case pe.C:{var A=e[d++],M=e[d++],_=e[d++],S=e[d++],C=e[d++],L=e[d++];m=RG(i,o,A,M,_,S,C,L,10),i=C,o=L;break}case pe.Q:{var A=e[d++],M=e[d++],_=e[d++],S=e[d++];m=NG(i,o,A,M,_,S,10),i=_,o=S;break}case pe.A:var E=e[d++],R=e[d++],N=e[d++],O=e[d++],k=e[d++],G=e[d++],H=G+k;d+=1,e[d++],y&&(s=fs(k)*N+E,l=hs(k)*O+R),m=w1(N,O)*b1(lo,Math.abs(G)),i=fs(H)*N+E,o=hs(H)*O+R;break;case pe.R:{s=i=e[d++],l=o=e[d++];var F=e[d++],B=e[d++];m=F*2+B*2;break}case pe.Z:{var b=s-i,w=l-o;m=Math.sqrt(b*b+w*w),i=s,o=l;break}}m>=0&&(u[v++]=m,f+=m)}return this._pathLen=f,f},r.prototype.rebuildPath=function(e,t){var a=this.data,n=this._ux,i=this._uy,o=this._len,s,l,u,f,v,d,p=t<1,y,m,_=0,S=0,b,w=0,A,M;if(!(p&&(this._pathSegLen||this._calculateLength(),y=this._pathSegLen,m=this._pathLen,b=t*m,!b)))t:for(var C=0;C0&&(e.lineTo(A,M),w=0),L){case pe.M:s=u=a[C++],l=f=a[C++],e.moveTo(u,f);break;case pe.L:{v=a[C++],d=a[C++];var R=ii(v-u),N=ii(d-f);if(R>n||N>i){if(p){var O=y[S++];if(_+O>b){var k=(b-_)/O;e.lineTo(u*(1-k)+v*k,f*(1-k)+d*k);break t}_+=O}e.lineTo(v,d),u=v,f=d,w=0}else{var G=R*R+N*N;G>w&&(A=v,M=d,w=G)}break}case pe.C:{var H=a[C++],F=a[C++],B=a[C++],j=a[C++],Y=a[C++],K=a[C++];if(p){var O=y[S++];if(_+O>b){var k=(b-_)/O;Lo(u,H,B,Y,k,us),Lo(f,F,j,K,k,cs),e.bezierCurveTo(us[1],cs[1],us[2],cs[2],us[3],cs[3]);break t}_+=O}e.bezierCurveTo(H,F,B,j,Y,K),u=Y,f=K;break}case pe.Q:{var H=a[C++],F=a[C++],B=a[C++],j=a[C++];if(p){var O=y[S++];if(_+O>b){var k=(b-_)/O;ih(u,H,B,k,us),ih(f,F,j,k,cs),e.quadraticCurveTo(us[1],cs[1],us[2],cs[2]);break t}_+=O}e.quadraticCurveTo(H,F,B,j),u=B,f=j;break}case pe.A:var nt=a[C++],U=a[C++],W=a[C++],rt=a[C++],ot=a[C++],ht=a[C++],gt=a[C++],mt=!a[C++],yt=W>rt?W:rt,St=ii(W-rt)>.001,Lt=ot+ht,_t=!1;if(p){var O=y[S++];_+O>b&&(Lt=ot+ht*(b-_)/O,_t=!0),_+=O}if(St&&e.ellipse?e.ellipse(nt,U,W,rt,gt,ot,Lt,mt):e.arc(nt,U,yt,ot,Lt,mt),_t)break t;E&&(s=fs(ot)*W+nt,l=hs(ot)*rt+U),u=fs(Lt)*W+nt,f=hs(Lt)*rt+U;break;case pe.R:s=u=a[C],l=f=a[C+1],v=a[C++],d=a[C++];var Et=a[C++],ge=a[C++];if(p){var O=y[S++];if(_+O>b){var Gt=b-_;e.moveTo(v,d),e.lineTo(v+b1(Gt,Et),d),Gt-=Et,Gt>0&&e.lineTo(v+Et,d+b1(Gt,ge)),Gt-=ge,Gt>0&&e.lineTo(v+w1(Et-Gt,0),d+ge),Gt-=Et,Gt>0&&e.lineTo(v,d+w1(ge-Gt,0));break t}_+=O}e.rect(v,d,Et,ge);break;case pe.Z:if(p){var O=y[S++];if(_+O>b){var k=(b-_)/O;e.lineTo(u*(1-k)+s*k,f*(1-k)+l*k);break t}_+=O}e.closePath(),u=s,f=l}}},r.prototype.clone=function(){var e=new r,t=this.data;return e.data=t.slice?t.slice():Array.prototype.slice.call(t),e._len=this._len,e},r.CMD=pe,r.initDefaultProps=(function(){var e=r.prototype;e._saveData=!0,e._ux=0,e._uy=0,e._pendingPtDist=0,e._version=0})(),r})();function co(r,e,t,a,n,i,o){if(n===0)return!1;var s=n,l=0,u=r;if(o>e+s&&o>a+s||or+s&&i>t+s||ie+v&&f>a+v&&f>i+v&&f>s+v||fr+v&&u>t+v&&u>n+v&&u>o+v||ue+u&&l>a+u&&l>i+u||lr+u&&s>t+u&&s>n+u||st||f+un&&(n+=of);var d=Math.atan2(l,s);return d<0&&(d+=of),d>=a&&d<=n||d+of>=a&&d+of<=n}function ui(r,e,t,a,n,i){if(i>e&&i>a||in?s:0}var to=kn.CMD,vs=Math.PI*2,hH=1e-4;function vH(r,e){return Math.abs(r-e)e&&u>a&&u>i&&u>s||u1&&dH(),p=tr(e,a,i,s,Pa[0]),d>1&&(y=tr(e,a,i,s,Pa[1]))),d===2?_e&&s>a&&s>i||s=0&&u<=1){for(var f=0,v=cr(e,a,i,u),d=0;dt||s<-t)return 0;var l=Math.sqrt(t*t-s*s);Ir[0]=-l,Ir[1]=l;var u=Math.abs(a-n);if(u<1e-4)return 0;if(u>=vs-1e-4){a=0,n=vs;var f=i?1:-1;return o>=Ir[0]+r&&o<=Ir[1]+r?f:0}if(a>n){var v=a;a=n,n=v}a<0&&(a+=vs,n+=vs);for(var d=0,p=0;p<2;p++){var y=Ir[p];if(y+r>o){var m=Math.atan2(s,y),f=i?1:-1;m<0&&(m=vs+m),(m>=a&&m<=n||m+vs>=a&&m+vs<=n)&&(m>Math.PI/2&&m1&&(t||(s+=ui(l,u,f,v,a,n))),_&&(l=i[y],u=i[y+1],f=l,v=u),m){case to.M:f=i[y++],v=i[y++],l=f,u=v;break;case to.L:if(t){if(co(l,u,i[y],i[y+1],e,a,n))return!0}else s+=ui(l,u,i[y],i[y+1],a,n)||0;l=i[y++],u=i[y++];break;case to.C:if(t){if(cH(l,u,i[y++],i[y++],i[y++],i[y++],i[y],i[y+1],e,a,n))return!0}else s+=pH(l,u,i[y++],i[y++],i[y++],i[y++],i[y],i[y+1],a,n)||0;l=i[y++],u=i[y++];break;case to.Q:if(t){if(I3(l,u,i[y++],i[y++],i[y],i[y+1],e,a,n))return!0}else s+=gH(l,u,i[y++],i[y++],i[y],i[y+1],a,n)||0;l=i[y++],u=i[y++];break;case to.A:var S=i[y++],b=i[y++],w=i[y++],A=i[y++],M=i[y++],C=i[y++];y+=1;var L=!!(1-i[y++]);d=Math.cos(M)*w+S,p=Math.sin(M)*A+b,_?(f=d,v=p):s+=ui(l,u,d,p,a,n);var E=(a-S)*A/w+S;if(t){if(fH(S,b,A,M,M+C,L,e,E,n))return!0}else s+=yH(S,b,A,M,M+C,L,E,n);l=Math.cos(M+C)*w+S,u=Math.sin(M+C)*A+b;break;case to.R:f=l=i[y++],v=u=i[y++];var R=i[y++],N=i[y++];if(d=f+R,p=v+N,t){if(co(f,v,d,v,e,a,n)||co(d,v,d,p,e,a,n)||co(d,p,f,p,e,a,n)||co(f,p,f,v,e,a,n))return!0}else s+=ui(d,v,d,p,a,n),s+=ui(f,p,f,v,a,n);break;case to.Z:if(t){if(co(l,u,f,v,e,a,n))return!0}else s+=ui(l,u,f,v,a,n);l=f,u=v;break}}return!t&&!vH(u,v)&&(s+=ui(l,u,f,v,a,n)||0),s!==0}function mH(r,e,t){return N3(r,0,!1,e,t)}function _H(r,e,t,a){return N3(r,e,!0,t,a)}var rg=wt({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},Ys),xH={style:wt({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},Kg.style)},D1=On.concat(["invisible","culling","z","z2","zlevel","parent"]),Ut=(function(r){De(e,r);function e(t){return r.call(this,t)||this}return e.prototype.update=function(){var t=this;r.prototype.update.call(this);var a=this.style;if(a.decal){var n=this._decalEl=this._decalEl||new e;n.buildPath===e.prototype.buildPath&&(n.buildPath=function(l){t.buildPath(l,t.shape)}),n.silent=!0;var i=n.style;for(var o in a)i[o]!==a[o]&&(i[o]=a[o]);i.fill=a.fill?a.decal:null,i.decal=null,i.shadowColor=null,a.strokeFirst&&(i.stroke=null);for(var s=0;s.5?Hx:a>.2?o8:Ux}else if(t)return Ux}return Hx},e.prototype.getInsideTextStroke=function(t){var a=this.style.fill;if(vt(a)){var n=this.__zr,i=!!(n&&n.isDarkMode()),o=Kp(t,0)0))},e.prototype.hasFill=function(){var t=this.style,a=t.fill;return a!=null&&a!=="none"},e.prototype.getBoundingRect=function(){var t=this._rect,a=this.style,n=!t;if(n){var i=!1;this.path||(i=!0,this.createPathProxy());var o=this.path;(i||this.__dirty&mu)&&(o.beginPath(),this.buildPath(o,this.shape,!1),this.pathUpdated()),t=o.getBoundingRect()}if(this._rect=t,this.hasStroke()&&this.path&&this.path.len()>0){var s=this._rectStroke||(this._rectStroke=t.clone());if(this.__dirty||n){s.copy(t);var l=a.strokeNoScale?this.getLineScale():1,u=a.lineWidth;if(!this.hasFill()){var f=this.strokeContainThreshold;u=Math.max(u,f??4)}l>1e-10&&(s.width+=u/l,s.height+=u/l,s.x-=u/l/2,s.y-=u/l/2)}return s}return t},e.prototype.contain=function(t,a){var n=this.transformCoordToLocal(t,a),i=this.getBoundingRect(),o=this.style;if(t=n[0],a=n[1],i.contain(t,a)){var s=this.path;if(this.hasStroke()){var l=o.lineWidth,u=o.strokeNoScale?this.getLineScale():1;if(u>1e-10&&(this.hasFill()||(l=Math.max(l,this.strokeContainThreshold)),_H(s,l/u,t,a)))return!0}if(this.hasFill())return mH(s,t,a)}return!1},e.prototype.dirtyShape=function(){this.__dirty|=mu,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},e.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},e.prototype.animateShape=function(t){return this.animate("shape",t)},e.prototype.updateDuringAnimation=function(t){t==="style"?this.dirtyStyle():t==="shape"?this.dirtyShape():this.markRedraw()},e.prototype.attrKV=function(t,a){t==="shape"?this.setShape(a):r.prototype.attrKV.call(this,t,a)},e.prototype.setShape=function(t,a){var n=this.shape;return n||(n=this.shape={}),typeof t=="string"?n[t]=a:et(n,t),this.dirtyShape(),this},e.prototype.shapeChanged=function(){return!!(this.__dirty&mu)},e.prototype.createStyle=function(t){return jg(rg,t)},e.prototype._innerSaveToNormal=function(t){r.prototype._innerSaveToNormal.call(this,t);var a=this._normalState;t.shape&&!a.shape&&(a.shape=et({},this.shape))},e.prototype._applyStateObj=function(t,a,n,i,o,s){r.prototype._applyStateObj.call(this,t,a,n,i,o,s);var l=!(a&&i),u;if(a&&a.shape?o?i?u=a.shape:(u=et({},n.shape),et(u,a.shape)):(u=et({},i?this.shape:n.shape),et(u,a.shape)):l&&(u=n.shape),u)if(o){this.shape=et({},this.shape);for(var f={},v=Yt(u),d=0;d0},e.prototype.hasFill=function(){var t=this.style,a=t.fill;return a!=null&&a!=="none"},e.prototype.createStyle=function(t){return jg(SH,t)},e.prototype.setBoundingRect=function(t){this._rect=t},e.prototype.getBoundingRect=function(){var t=this.style;if(!this._rect){var a=t.text;a!=null?a+="":a="";var n=Nh(a,t.font,t.textAlign,t.textBaseline);if(n.x+=t.x||0,n.y+=t.y||0,this.hasStroke()){var i=t.lineWidth;n.x-=i/2,n.y-=i/2,n.width+=i,n.height+=i}this._rect=n}return this._rect},e.initDefaultProps=(function(){var t=e.prototype;t.dirtyRectTolerance=10})(),e})(Fa);Iu.prototype.type="tspan";var bH=wt({x:0,y:0},Ys),wH={style:wt({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},Kg.style)};function TH(r){return!!(r&&typeof r!="string"&&r.width&&r.height)}var hr=(function(r){De(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createStyle=function(t){return jg(bH,t)},e.prototype._getSize=function(t){var a=this.style,n=a[t];if(n!=null)return n;var i=TH(a.image)?a.image:this.__image;if(!i)return 0;var o=t==="width"?"height":"width",s=a[o];return s==null?i[t]:i[t]/i[o]*s},e.prototype.getWidth=function(){return this._getSize("width")},e.prototype.getHeight=function(){return this._getSize("height")},e.prototype.getAnimationStyleProps=function(){return wH},e.prototype.getBoundingRect=function(){var t=this.style;return this._rect||(this._rect=new kt(t.x||0,t.y||0,this.getWidth(),this.getHeight())),this._rect},e})(Fa);hr.prototype.type="image";function AH(r,e){var t=e.x,a=e.y,n=e.width,i=e.height,o=e.r,s,l,u,f;n<0&&(t=t+n,n=-n),i<0&&(a=a+i,i=-i),typeof o=="number"?s=l=u=f=o:o instanceof Array?o.length===1?s=l=u=f=o[0]:o.length===2?(s=u=o[0],l=f=o[1]):o.length===3?(s=o[0],l=f=o[1],u=o[2]):(s=o[0],l=o[1],u=o[2],f=o[3]):s=l=u=f=0;var v;s+l>n&&(v=s+l,s*=n/v,l*=n/v),u+f>n&&(v=u+f,u*=n/v,f*=n/v),l+u>i&&(v=l+u,l*=i/v,u*=i/v),s+f>i&&(v=s+f,s*=i/v,f*=i/v),r.moveTo(t+s,a),r.lineTo(t+n-l,a),l!==0&&r.arc(t+n-l,a+l,l,-Math.PI/2,0),r.lineTo(t+n,a+i-u),u!==0&&r.arc(t+n-u,a+i-u,u,0,Math.PI/2),r.lineTo(t+f,a+i),f!==0&&r.arc(t+f,a+i-f,f,Math.PI/2,Math.PI),r.lineTo(t,a+s),s!==0&&r.arc(t+s,a+s,s,Math.PI,Math.PI*1.5)}var Tu=Math.round;function P3(r,e,t){if(e){var a=e.x1,n=e.x2,i=e.y1,o=e.y2;r.x1=a,r.x2=n,r.y1=i,r.y2=o;var s=t&&t.lineWidth;return s&&(Tu(a*2)===Tu(n*2)&&(r.x1=r.x2=zs(a,s,!0)),Tu(i*2)===Tu(o*2)&&(r.y1=r.y2=zs(i,s,!0))),r}}function O3(r,e,t){if(e){var a=e.x,n=e.y,i=e.width,o=e.height;r.x=a,r.y=n,r.width=i,r.height=o;var s=t&&t.lineWidth;return s&&(r.x=zs(a,s,!0),r.y=zs(n,s,!0),r.width=Math.max(zs(a+i,s,!1)-r.x,i===0?0:1),r.height=Math.max(zs(n+o,s,!1)-r.y,o===0?0:1)),r}}function zs(r,e,t){if(!e)return r;var a=Tu(r*2);return(a+Tu(e))%2===0?a/2:(a+(t?1:-1))/2}var DH=(function(){function r(){this.x=0,this.y=0,this.width=0,this.height=0}return r})(),CH={},Wt=(function(r){De(e,r);function e(t){return r.call(this,t)||this}return e.prototype.getDefaultShape=function(){return new DH},e.prototype.buildPath=function(t,a){var n,i,o,s;if(this.subPixelOptimize){var l=O3(CH,a,this.style);n=l.x,i=l.y,o=l.width,s=l.height,l.r=a.r,a=l}else n=a.x,i=a.y,o=a.width,s=a.height;a.r?AH(t,a):t.rect(n,i,o,s)},e.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},e})(Ut);Wt.prototype.type="rect";var dM={fill:"#000"},pM=2,MH={style:wt({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},Kg.style)},$t=(function(r){De(e,r);function e(t){var a=r.call(this)||this;return a.type="text",a._children=[],a._defaultStyle=dM,a.attr(t),a}return e.prototype.childrenRef=function(){return this._children},e.prototype.update=function(){r.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var t=0;t0,k=t.width!=null&&(t.overflow==="truncate"||t.overflow==="break"||t.overflow==="breakAll"),G=o.calculatedLineHeight,H=0;H=0&&(H=C[G],H.align==="right");)this._placeToken(H,t,E,S,k,"right",w),R-=H.width,k-=H.width,G--;for(O+=(i-(O-_)-(b-k)-R)/2;N<=G;)H=C[N],this._placeToken(H,t,E,S,O+H.width/2,"center",w),O+=H.width,N++;S+=E}},e.prototype._placeToken=function(t,a,n,i,o,s,l){var u=a.rich[t.styleName]||{};u.text=t.text;var f=t.verticalAlign,v=i+n/2;f==="top"?v=i+t.height/2:f==="bottom"&&(v=i+n-t.height/2);var d=!t.isLineHolder&&C1(u);d&&this._renderBackground(u,a,s==="right"?o-t.width:s==="center"?o-t.width/2:o,v-t.height/2,t.width,t.height);var p=!!u.backgroundColor,y=t.textPadding;y&&(o=SM(o,s,y),v-=t.height/2-y[0]-t.innerHeight/2);var m=this._getOrCreateChild(Iu),_=m.createStyle();m.useStyle(_);var S=this._defaultStyle,b=!1,w=0,A=xM("fill"in u?u.fill:"fill"in a?a.fill:(b=!0,S.fill)),M=_M("stroke"in u?u.stroke:"stroke"in a?a.stroke:!p&&!l&&(!S.autoStroke||b)?(w=pM,S.stroke):null),C=u.textShadowBlur>0||a.textShadowBlur>0;_.text=t.text,_.x=o,_.y=v,C&&(_.shadowBlur=u.textShadowBlur||a.textShadowBlur||0,_.shadowColor=u.textShadowColor||a.textShadowColor||"transparent",_.shadowOffsetX=u.textShadowOffsetX||a.textShadowOffsetX||0,_.shadowOffsetY=u.textShadowOffsetY||a.textShadowOffsetY||0),_.textAlign=s,_.textBaseline="middle",_.font=t.font||Co,_.opacity=Rn(u.opacity,a.opacity,1),yM(_,u),M&&(_.lineWidth=Rn(u.lineWidth,a.lineWidth,w),_.lineDash=Ot(u.lineDash,a.lineDash),_.lineDashOffset=a.lineDashOffset||0,_.stroke=M),A&&(_.fill=A);var L=t.contentWidth,E=t.contentHeight;m.setBoundingRect(new kt(Rf(_.x,L,_.textAlign),_u(_.y,E,_.textBaseline),L,E))},e.prototype._renderBackground=function(t,a,n,i,o,s){var l=t.backgroundColor,u=t.borderWidth,f=t.borderColor,v=l&&l.image,d=l&&!v,p=t.borderRadius,y=this,m,_;if(d||t.lineHeight||u&&f){m=this._getOrCreateChild(Wt),m.useStyle(m.createStyle()),m.style.fill=null;var S=m.shape;S.x=n,S.y=i,S.width=o,S.height=s,S.r=p,m.dirtyShape()}if(d){var b=m.style;b.fill=l||null,b.fillOpacity=Ot(t.fillOpacity,1)}else if(v){_=this._getOrCreateChild(hr),_.onload=function(){y.dirtyStyle()};var w=_.style;w.image=l.image,w.x=n,w.y=i,w.width=o,w.height=s}if(u&&f){var b=m.style;b.lineWidth=u,b.stroke=f,b.strokeOpacity=Ot(t.strokeOpacity,1),b.lineDash=t.borderDash,b.lineDashOffset=t.borderDashOffset||0,m.strokeContainThreshold=0,m.hasFill()&&m.hasStroke()&&(b.strokeFirst=!0,b.lineWidth*=2)}var A=(m||_).style;A.shadowBlur=t.shadowBlur||0,A.shadowColor=t.shadowColor||"transparent",A.shadowOffsetX=t.shadowOffsetX||0,A.shadowOffsetY=t.shadowOffsetY||0,A.opacity=Rn(t.opacity,a.opacity,1)},e.makeFont=function(t){var a="";return k3(t)&&(a=[t.fontStyle,t.fontWeight,z3(t.fontSize),t.fontFamily||"sans-serif"].join(" ")),a&&rn(a)||t.textFont||t.font},e})(Fa),LH={left:!0,right:1,center:1},EH={top:1,bottom:1,middle:1},gM=["fontStyle","fontWeight","fontSize","fontFamily"];function z3(r){return typeof r=="string"&&(r.indexOf("px")!==-1||r.indexOf("rem")!==-1||r.indexOf("em")!==-1)?r:isNaN(+r)?cb+"px":r+"px"}function yM(r,e){for(var t=0;t=0,i=!1;if(r instanceof Ut){var o=B3(r),s=n&&o.selectFill||o.normalFill,l=n&&o.selectStroke||o.normalStroke;if(eu(s)||eu(l)){a=a||{};var u=a.style||{};u.fill==="inherit"?(i=!0,a=et({},a),u=et({},u),u.fill=s):!eu(u.fill)&&eu(s)?(i=!0,a=et({},a),u=et({},u),u.fill=DM(s)):!eu(u.stroke)&&eu(l)&&(i||(a=et({},a),u=et({},u)),u.stroke=DM(l)),a.style=u}}if(a&&a.z2==null){i||(a=et({},a));var f=r.z2EmphasisLift;a.z2=r.z2+(f??Xu)}return a}function kH(r,e,t){if(t&&t.z2==null){t=et({},t);var a=r.z2SelectLift;t.z2=r.z2+(a??IH)}return t}function BH(r,e,t){var a=Vt(r.currentStates,e)>=0,n=r.style.opacity,i=a?null:OH(r,["opacity"],e,{opacity:1});t=t||{};var o=t.style||{};return o.opacity==null&&(t=et({},t),o=et({opacity:a?n:i.opacity*.1},o),t.style=o),t}function M1(r,e){var t=this.states[r];if(this.style){if(r==="emphasis")return zH(this,r,e,t);if(r==="blur")return BH(this,r,t);if(r==="select")return kH(this,r,t)}return t}function rl(r){r.stateProxy=M1;var e=r.getTextContent(),t=r.getTextGuideLine();e&&(e.stateProxy=M1),t&&(t.stateProxy=M1)}function MM(r,e){!Y3(r,e)&&!r.__highByOuter&&Ai(r,V3)}function LM(r,e){!Y3(r,e)&&!r.__highByOuter&&Ai(r,G3)}function _i(r,e){r.__highByOuter|=1<<(e||0),Ai(r,V3)}function xi(r,e){!(r.__highByOuter&=~(1<<(e||0)))&&Ai(r,G3)}function U3(r){Ai(r,Eb)}function Rb(r){Ai(r,H3)}function F3(r){Ai(r,NH)}function j3(r){Ai(r,PH)}function Y3(r,e){return r.__highDownSilentOnTouch&&e.zrByTouch}function X3(r){var e=r.getModel(),t=[],a=[];e.eachComponent(function(n,i){var o=Mb(i),s=n==="series",l=s?r.getViewOfSeriesModel(i):r.getViewOfComponentModel(i);!s&&a.push(l),o.isBlured&&(l.group.traverse(function(u){H3(u)}),s&&t.push(i)),o.isBlured=!1}),P(a,function(n){n&&n.toggleBlurSeries&&n.toggleBlurSeries(t,!1,e)})}function Wx(r,e,t,a){var n=a.getModel();t=t||"coordinateSystem";function i(u,f){for(var v=0;v0){var s={dataIndex:o,seriesIndex:t.seriesIndex};i!=null&&(s.dataType=i),e.push(s)}})}),e}function Zs(r,e,t){ks(r,!0),Ai(r,rl),$x(r,e,t)}function jH(r){ks(r,!1)}function Pe(r,e,t,a){a?jH(r):Zs(r,e,t)}function $x(r,e,t){var a=Rt(r);e!=null?(a.focus=e,a.blurScope=t):a.focus&&(a.focus=null)}var RM=["emphasis","blur","select"],YH={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function xr(r,e,t,a){t=t||"itemStyle";for(var n=0;n1&&(o*=L1(y),s*=L1(y));var m=(n===i?-1:1)*L1((o*o*(s*s)-o*o*(p*p)-s*s*(d*d))/(o*o*(p*p)+s*s*(d*d)))||0,_=m*o*p/s,S=m*-s*d/o,b=(r+t)/2+Nd(v)*_-Id(v)*S,w=(e+a)/2+Id(v)*_+Nd(v)*S,A=OM([1,0],[(d-_)/o,(p-S)/s]),M=[(d-_)/o,(p-S)/s],C=[(-1*d-_)/o,(-1*p-S)/s],L=OM(M,C);if(Qx(M,C)<=-1&&(L=sf),Qx(M,C)>=1&&(L=0),L<0){var E=Math.round(L/sf*1e6)/1e6;L=sf*2+E%2*sf}f.addData(u,b,w,o,s,A,L,v,i)}var KH=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig,QH=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;function JH(r){var e=new kn;if(!r)return e;var t=0,a=0,n=t,i=a,o,s=kn.CMD,l=r.match(KH);if(!l)return e;for(var u=0;uH*H+F*F&&(E=N,R=O),{cx:E,cy:R,x0:-f,y0:-v,x1:E*(n/M-1),y1:R*(n/M-1)}}function o9(r){var e;if(it(r)){var t=r.length;if(!t)return r;t===1?e=[r[0],r[0],0,0]:t===2?e=[r[0],r[0],r[1],r[1]]:t===3?e=r.concat(r[2]):e=r}else e=[r,r,r,r];return e}function s9(r,e){var t,a=If(e.r,0),n=If(e.r0||0,0),i=a>0,o=n>0;if(!(!i&&!o)){if(i||(a=n,n=0),n>a){var s=a;a=n,n=s}var l=e.startAngle,u=e.endAngle;if(!(isNaN(l)||isNaN(u))){var f=e.cx,v=e.cy,d=!!e.clockwise,p=kM(u-l),y=p>E1&&p%E1;if(y>Qa&&(p=y),!(a>Qa))r.moveTo(f,v);else if(p>E1-Qa)r.moveTo(f+a*au(l),v+a*ds(l)),r.arc(f,v,a,l,u,!d),n>Qa&&(r.moveTo(f+n*au(u),v+n*ds(u)),r.arc(f,v,n,u,l,d));else{var m=void 0,_=void 0,S=void 0,b=void 0,w=void 0,A=void 0,M=void 0,C=void 0,L=void 0,E=void 0,R=void 0,N=void 0,O=void 0,k=void 0,G=void 0,H=void 0,F=a*au(l),B=a*ds(l),j=n*au(u),Y=n*ds(u),K=p>Qa;if(K){var nt=e.cornerRadius;nt&&(t=o9(nt),m=t[0],_=t[1],S=t[2],b=t[3]);var U=kM(a-n)/2;if(w=xn(U,S),A=xn(U,b),M=xn(U,m),C=xn(U,_),R=L=If(w,A),N=E=If(M,C),(L>Qa||E>Qa)&&(O=a*au(u),k=a*ds(u),G=n*au(l),H=n*ds(l),pQa){var St=xn(S,R),Lt=xn(b,R),_t=Pd(G,H,F,B,a,St,d),Et=Pd(O,k,j,Y,a,Lt,d);r.moveTo(f+_t.cx+_t.x0,v+_t.cy+_t.y0),R0&&r.arc(f+_t.cx,v+_t.cy,St,wr(_t.y0,_t.x0),wr(_t.y1,_t.x1),!d),r.arc(f,v,a,wr(_t.cy+_t.y1,_t.cx+_t.x1),wr(Et.cy+Et.y1,Et.cx+Et.x1),!d),Lt>0&&r.arc(f+Et.cx,v+Et.cy,Lt,wr(Et.y1,Et.x1),wr(Et.y0,Et.x0),!d))}else r.moveTo(f+F,v+B),r.arc(f,v,a,l,u,!d);if(!(n>Qa)||!K)r.lineTo(f+j,v+Y);else if(N>Qa){var St=xn(m,N),Lt=xn(_,N),_t=Pd(j,Y,O,k,n,-Lt,d),Et=Pd(F,B,G,H,n,-St,d);r.lineTo(f+_t.cx+_t.x0,v+_t.cy+_t.y0),N0&&r.arc(f+_t.cx,v+_t.cy,Lt,wr(_t.y0,_t.x0),wr(_t.y1,_t.x1),!d),r.arc(f,v,n,wr(_t.cy+_t.y1,_t.cx+_t.x1),wr(Et.cy+Et.y1,Et.cx+Et.x1),d),St>0&&r.arc(f+Et.cx,v+Et.cy,St,wr(Et.y1,Et.x1),wr(Et.y0,Et.x0),!d))}else r.lineTo(f+j,v+Y),r.arc(f,v,n,u,l,d)}r.closePath()}}}var l9=(function(){function r(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0,this.cornerRadius=0}return r})(),Br=(function(r){De(e,r);function e(t){return r.call(this,t)||this}return e.prototype.getDefaultShape=function(){return new l9},e.prototype.buildPath=function(t,a){s9(t,a)},e.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},e})(Ut);Br.prototype.type="sector";var u9=(function(){function r(){this.cx=0,this.cy=0,this.r=0,this.r0=0}return r})(),zh=(function(r){De(e,r);function e(t){return r.call(this,t)||this}return e.prototype.getDefaultShape=function(){return new u9},e.prototype.buildPath=function(t,a){var n=a.cx,i=a.cy,o=Math.PI*2;t.moveTo(n+a.r,i),t.arc(n,i,a.r,0,o,!1),t.moveTo(n+a.r0,i),t.arc(n,i,a.r0,0,o,!0)},e})(Ut);zh.prototype.type="ring";function c9(r,e,t,a){var n=[],i=[],o=[],s=[],l,u,f,v;if(a){f=[1/0,1/0],v=[-1/0,-1/0];for(var d=0,p=r.length;d=2){if(a){var i=c9(n,a,t,e.smoothConstraint);r.moveTo(n[0][0],n[0][1]);for(var o=n.length,s=0;s<(t?o:o-1);s++){var l=i[s*2],u=i[s*2+1],f=n[(s+1)%o];r.bezierCurveTo(l[0],l[1],u[0],u[1],f[0],f[1])}}else{r.moveTo(n[0][0],n[0][1]);for(var s=1,v=n.length;sgs[1]){if(s=!1,i)return s;var f=Math.abs(gs[0]-ps[1]),v=Math.abs(ps[0]-gs[1]);Math.min(f,v)>n.len()&&(f0){var v=f.duration,d=f.delay,p=f.easing,y={duration:v,delay:d||0,easing:p,done:i,force:!!i||!!o,setToFinal:!u,scope:r,during:o};s?e.animateFrom(t,y):e.animateTo(t,y)}else e.stopAnimation(),!s&&e.attr(t),o&&o(1),i&&i()}function Jt(r,e,t,a,n,i){Ob("update",r,e,t,a,n,i)}function Le(r,e,t,a,n,i){Ob("enter",r,e,t,a,n,i)}function Mu(r){if(!r.__zr)return!0;for(var e=0;eMath.abs(i[1])?i[0]>0?"right":"left":i[1]>0?"bottom":"top"}function GM(r){return!r.isGroup}function T9(r){return r.shape!=null}function Vh(r,e,t){if(!r||!e)return;function a(o){var s={};return o.traverse(function(l){GM(l)&&l.anid&&(s[l.anid]=l)}),s}function n(o){var s={x:o.x,y:o.y,rotation:o.rotation};return T9(o)&&(s.shape=et({},o.shape)),s}var i=a(r);e.traverse(function(o){if(GM(o)&&o.anid){var s=i[o.anid];if(s){var l=n(o);o.attr(n(s)),Jt(o,l,t,Rt(o).dataIndex)}}})}function oP(r,e){return st(r,function(t){var a=t[0];a=ig(a,e.x),a=og(a,e.x+e.width);var n=t[1];return n=ig(n,e.y),n=og(n,e.y+e.height),[a,n]})}function A9(r,e){var t=ig(r.x,e.x),a=og(r.x+r.width,e.x+e.width),n=ig(r.y,e.y),i=og(r.y+r.height,e.y+e.height);if(a>=t&&i>=n)return{x:t,y:n,width:a-t,height:i-n}}function Gh(r,e,t){var a=et({rectHover:!0},e),n=a.style={strokeNoScale:!0};if(t=t||{x:-1,y:-1,width:2,height:2},r)return r.indexOf("image://")===0?(n.image=r.slice(8),wt(n,t),new hr(a)):ay(r.replace("path://",""),a,t,"center")}function Nf(r,e,t,a,n){for(var i=0,o=n[n.length-1];i1)return!1;var _=R1(p,y,f,v)/d;return!(_<0||_>1)}function R1(r,e,t,a){return r*a-t*e}function D9(r){return r<=1e-6&&r>=-1e-6}function Wu(r){var e=r.itemTooltipOption,t=r.componentModel,a=r.itemName,n=vt(e)?{formatter:e}:e,i=t.mainType,o=t.componentIndex,s={componentType:i,name:a,$vars:["name"]};s[i+"Index"]=o;var l=r.formatterParamsExtra;l&&P(Yt(l),function(f){pt(s,f)||(s[f]=l[f],s.$vars.push(f))});var u=Rt(r.el);u.componentMainType=i,u.componentIndex=o,u.tooltipConfig={name:a,option:wt({content:a,formatterParams:s},n)}}function HM(r,e){var t;r.isGroup&&(t=e(r)),t||r.traverse(e)}function Oo(r,e){if(r)if(it(r))for(var t=0;t=0&&s.push(l)}),s}}function zo(r,e){return zt(zt({},r,!0),e,!0)}const B9={time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}},V9={time:{month:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayOfWeekAbbr:["日","一","二","三","四","五","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}};var lg="ZH",kb="EN",hh=kb,Pp={},Bb={},dP=Ft.domSupported?(function(){var r=(document.documentElement.lang||navigator.language||navigator.browserLanguage).toUpperCase();return r.indexOf(lg)>-1?lg:hh})():hh;function pP(r,e){r=r.toUpperCase(),Bb[r]=new oe(e),Pp[r]=e}function G9(r){if(vt(r)){var e=Pp[r.toUpperCase()]||{};return r===lg||r===kb?Dt(e):zt(Dt(e),Dt(Pp[hh]),!1)}else return zt(Dt(r),Dt(Pp[hh]),!1)}function eS(r){return Bb[r]}function H9(){return Bb[hh]}pP(kb,B9);pP(lg,V9);var Vb=1e3,Gb=Vb*60,$f=Gb*60,Va=$f*24,XM=Va*365,Pf={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}",none:"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"},kd="{yyyy}-{MM}-{dd}",ZM={year:"{yyyy}",month:"{yyyy}-{MM}",day:kd,hour:kd+" "+Pf.hour,minute:kd+" "+Pf.minute,second:kd+" "+Pf.second,millisecond:Pf.none},P1=["year","month","day","hour","minute","second","millisecond"],gP=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function eo(r,e){return r+="","0000".substr(0,e-r.length)+r}function Lu(r){switch(r){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return r}}function U9(r){return r===Lu(r)}function F9(r){switch(r){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}function oy(r,e,t,a){var n=zn(r),i=n[Hb(t)](),o=n[Eu(t)]()+1,s=Math.floor((o-1)/3)+1,l=n[sy(t)](),u=n["get"+(t?"UTC":"")+"Day"](),f=n[vh(t)](),v=(f-1)%12+1,d=n[ly(t)](),p=n[uy(t)](),y=n[cy(t)](),m=a instanceof oe?a:eS(a||dP)||H9(),_=m.getModel("time"),S=_.get("month"),b=_.get("monthAbbr"),w=_.get("dayOfWeek"),A=_.get("dayOfWeekAbbr");return(e||"").replace(/{yyyy}/g,i+"").replace(/{yy}/g,eo(i%100+"",2)).replace(/{Q}/g,s+"").replace(/{MMMM}/g,S[o-1]).replace(/{MMM}/g,b[o-1]).replace(/{MM}/g,eo(o,2)).replace(/{M}/g,o+"").replace(/{dd}/g,eo(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,w[u]).replace(/{ee}/g,A[u]).replace(/{e}/g,u+"").replace(/{HH}/g,eo(f,2)).replace(/{H}/g,f+"").replace(/{hh}/g,eo(v+"",2)).replace(/{h}/g,v+"").replace(/{mm}/g,eo(d,2)).replace(/{m}/g,d+"").replace(/{ss}/g,eo(p,2)).replace(/{s}/g,p+"").replace(/{SSS}/g,eo(y,3)).replace(/{S}/g,y+"")}function j9(r,e,t,a,n){var i=null;if(vt(t))i=t;else if(bt(t))i=t(r.value,e,{level:r.level});else{var o=et({},Pf);if(r.level>0)for(var s=0;s=0;--s)if(l[u]){i=l[u];break}i=i||o.none}if(it(i)){var v=r.level==null?0:r.level>=0?r.level:i.length+r.level;v=Math.min(v,i.length-1),i=i[v]}}return oy(new Date(r.value),i,n,a)}function yP(r,e){var t=zn(r),a=t[Eu(e)]()+1,n=t[sy(e)](),i=t[vh(e)](),o=t[ly(e)](),s=t[uy(e)](),l=t[cy(e)](),u=l===0,f=u&&s===0,v=f&&o===0,d=v&&i===0,p=d&&n===1,y=p&&a===1;return y?"year":p?"month":d?"day":v?"hour":f?"minute":u?"second":"millisecond"}function WM(r,e,t){var a=Qt(r)?zn(r):r;switch(e=e||yP(r,t),e){case"year":return a[Hb(t)]();case"half-year":return a[Eu(t)]()>=6?1:0;case"quarter":return Math.floor((a[Eu(t)]()+1)/4);case"month":return a[Eu(t)]();case"day":return a[sy(t)]();case"half-day":return a[vh(t)]()/24;case"hour":return a[vh(t)]();case"minute":return a[ly(t)]();case"second":return a[uy(t)]();case"millisecond":return a[cy(t)]()}}function Hb(r){return r?"getUTCFullYear":"getFullYear"}function Eu(r){return r?"getUTCMonth":"getMonth"}function sy(r){return r?"getUTCDate":"getDate"}function vh(r){return r?"getUTCHours":"getHours"}function ly(r){return r?"getUTCMinutes":"getMinutes"}function uy(r){return r?"getUTCSeconds":"getSeconds"}function cy(r){return r?"getUTCMilliseconds":"getMilliseconds"}function Y9(r){return r?"setUTCFullYear":"setFullYear"}function mP(r){return r?"setUTCMonth":"setMonth"}function _P(r){return r?"setUTCDate":"setDate"}function xP(r){return r?"setUTCHours":"setHours"}function SP(r){return r?"setUTCMinutes":"setMinutes"}function bP(r){return r?"setUTCSeconds":"setSeconds"}function wP(r){return r?"setUTCMilliseconds":"setMilliseconds"}function TP(r){if(!y3(r))return vt(r)?r:"-";var e=(r+"").split(".");return e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:"")}function AP(r,e){return r=(r||"").toLowerCase().replace(/-(.)/g,function(t,a){return a.toUpperCase()}),e&&r&&(r=r.charAt(0).toUpperCase()+r.slice(1)),r}var Ku=gb;function rS(r,e,t){var a="{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}";function n(f){return f&&rn(f)?f:"-"}function i(f){return!!(f!=null&&!isNaN(f)&&isFinite(f))}var o=e==="time",s=r instanceof Date;if(o||s){var l=o?zn(r):r;if(isNaN(+l)){if(s)return"-"}else return oy(l,a,t)}if(e==="ordinal")return xx(r)?n(r):Qt(r)&&i(r)?r+"":"-";var u=mi(r);return i(u)?TP(u):xx(r)?n(r):typeof r=="boolean"?r+"":"-"}var qM=["a","b","c","d","e","f","g"],O1=function(r,e){return"{"+r+(e??"")+"}"};function DP(r,e,t){it(e)||(e=[e]);var a=e.length;if(!a)return"";for(var n=e[0].$vars||[],i=0;i':'';var o=t.markerId||"markerX";return{renderMode:i,content:"{"+o+"|} ",style:n==="subItem"?{width:4,height:4,borderRadius:2,backgroundColor:a}:{width:10,height:10,borderRadius:5,backgroundColor:a}}}function al(r,e){return e=e||"transparent",vt(r)?r:Tt(r)&&r.colorStops&&(r.colorStops[0]||{}).color||e}function ug(r,e){if(e==="_blank"||e==="blank"){var t=window.open();t.opener=null,t.location.href=r}else window.open(r,e)}var Op=P,CP=["left","right","top","bottom","width","height"],Bs=[["width","left","right"],["height","top","bottom"]];function Ub(r,e,t,a,n){var i=0,o=0;a==null&&(a=1/0),n==null&&(n=1/0);var s=0;e.eachChild(function(l,u){var f=l.getBoundingRect(),v=e.childAt(u+1),d=v&&v.getBoundingRect(),p,y;if(r==="horizontal"){var m=f.width+(d?-d.x+f.x:0);p=i+m,p>a||l.newline?(i=0,p=m,o+=s+t,s=f.height):s=Math.max(s,f.height)}else{var _=f.height+(d?-d.y+f.y:0);y=o+_,y>n||l.newline?(i+=s+t,o=0,y=_,s=f.width):s=Math.max(s,f.width)}l.newline||(l.x=i,l.y=o,l.markRedraw(),r==="horizontal"?i=p+t:o=y+t)})}var qs=Ub;It(Ub,"vertical");It(Ub,"horizontal");function W9(r,e,t){var a=e.width,n=e.height,i=ft(r.left,a),o=ft(r.top,n),s=ft(r.right,a),l=ft(r.bottom,n);return(isNaN(i)||isNaN(parseFloat(r.left)))&&(i=0),(isNaN(s)||isNaN(parseFloat(r.right)))&&(s=a),(isNaN(o)||isNaN(parseFloat(r.top)))&&(o=0),(isNaN(l)||isNaN(parseFloat(r.bottom)))&&(l=n),t=Ku(t||0),{width:Math.max(s-i-t[1]-t[3],0),height:Math.max(l-o-t[0]-t[2],0)}}function Qe(r,e,t){t=Ku(t||0);var a=e.width,n=e.height,i=ft(r.left,a),o=ft(r.top,n),s=ft(r.right,a),l=ft(r.bottom,n),u=ft(r.width,a),f=ft(r.height,n),v=t[2]+t[0],d=t[1]+t[3],p=r.aspect;switch(isNaN(u)&&(u=a-s-d-i),isNaN(f)&&(f=n-l-v-o),p!=null&&(isNaN(u)&&isNaN(f)&&(p>a/n?u=a*.8:f=n*.8),isNaN(u)&&(u=p*f),isNaN(f)&&(f=u/p)),isNaN(i)&&(i=a-s-u-d),isNaN(o)&&(o=n-l-f-v),r.left||r.right){case"center":i=a/2-u/2-t[3];break;case"right":i=a-u-d;break}switch(r.top||r.bottom){case"middle":case"center":o=n/2-f/2-t[0];break;case"bottom":o=n-f-v;break}i=i||0,o=o||0,isNaN(u)&&(u=a-d-i-(s||0)),isNaN(f)&&(f=n-v-o-(l||0));var y=new kt(i+t[3],o+t[0],u,f);return y.margin=t,y}function fy(r,e,t,a,n,i){var o=!n||!n.hv||n.hv[0],s=!n||!n.hv||n.hv[1],l=n&&n.boundingMode||"all";if(i=i||r,i.x=r.x,i.y=r.y,!o&&!s)return!1;var u;if(l==="raw")u=r.type==="group"?new kt(0,0,+e.width||0,+e.height||0):r.getBoundingRect();else if(u=r.getBoundingRect(),r.needLocalTransform()){var f=r.getLocalTransform();u=u.clone(),u.applyTransform(f)}var v=Qe(wt({width:u.width,height:u.height},e),t,a),d=o?v.x-u.x:0,p=s?v.y-u.y:0;return l==="raw"?(i.x=d,i.y=p):(i.x+=d,i.y+=p),i===r&&r.markRedraw(),!0}function q9(r,e){return r[Bs[e][0]]!=null||r[Bs[e][1]]!=null&&r[Bs[e][2]]!=null}function dh(r){var e=r.layoutMode||r.constructor.layoutMode;return Tt(e)?e:e?{type:e}:null}function Ro(r,e,t){var a=t&&t.ignoreSize;!it(a)&&(a=[a,a]);var n=o(Bs[0],0),i=o(Bs[1],1);u(Bs[0],r,n),u(Bs[1],r,i);function o(f,v){var d={},p=0,y={},m=0,_=2;if(Op(f,function(w){y[w]=r[w]}),Op(f,function(w){s(e,w)&&(d[w]=y[w]=e[w]),l(d,w)&&p++,l(y,w)&&m++}),a[v])return l(e,f[1])?y[f[2]]=null:l(e,f[2])&&(y[f[1]]=null),y;if(m===_||!p)return y;if(p>=_)return d;for(var S=0;S=0;l--)s=zt(s,n[l],!0);a.defaultOption=s}return a.defaultOption},e.prototype.getReferringComponents=function(t,a){var n=t+"Index",i=t+"Id";return Ph(this.ecModel,t,{index:this.get(n,!0),id:this.get(i,!0)},a)},e.prototype.getBoxLayoutParams=function(){var t=this;return{left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")}},e.prototype.getZLevelKey=function(){return""},e.prototype.setZLevel=function(t){this.option.zlevel=t},e.protoInitialize=(function(){var t=e.prototype;t.type="component",t.id="",t.name="",t.mainType="",t.subType="",t.componentIndex=0})(),e})(oe);C3(jt,oe);qg(jt);z9(jt);k9(jt,K9);function K9(r){var e=[];return P(jt.getClassesByMainType(r),function(t){e=e.concat(t.dependencies||t.prototype.dependencies||[])}),e=st(e,function(t){return Mn(t).main}),r!=="dataset"&&Vt(e,"dataset")<=0&&e.unshift("dataset"),e}var LP="";typeof navigator<"u"&&(LP=navigator.platform||"");var nu="rgba(0, 0, 0, 0.2)";const Q9={darkMode:"auto",colorBy:"series",color:["#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],gradientColor:["#f6efa6","#d88273","#bf444c"],aria:{decal:{decals:[{color:nu,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:nu,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:nu,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:nu,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:nu,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:nu,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:LP.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1};var EP=xt(["tooltip","label","itemName","itemId","itemGroupId","seriesName"]),Ya="original",Cr="arrayRows",Xa="objectRows",Bn="keyedColumns",wo="typedArray",RP="unknown",In="column",Ju="row",mr={Must:1,Might:2,Not:3},IP=Kt();function J9(r){IP(r).datasetMap=xt()}function NP(r,e,t){var a={},n=jb(e);if(!n||!r)return a;var i=[],o=[],s=e.ecModel,l=IP(s).datasetMap,u=n.uid+"_"+t.seriesLayoutBy,f,v;r=r.slice(),P(r,function(m,_){var S=Tt(m)?m:r[_]={name:m};S.type==="ordinal"&&f==null&&(f=_,v=y(S)),a[S.name]=[]});var d=l.get(u)||l.set(u,{categoryWayDim:v,valueWayDim:0});P(r,function(m,_){var S=m.name,b=y(m);if(f==null){var w=d.valueWayDim;p(a[S],w,b),p(o,w,b),d.valueWayDim+=b}else if(f===_)p(a[S],0,b),p(i,0,b);else{var w=d.categoryWayDim;p(a[S],w,b),p(o,w,b),d.categoryWayDim+=b}});function p(m,_,S){for(var b=0;be)return r[a];return r[t-1]}function zP(r,e,t,a,n,i,o){i=i||r;var s=e(i),l=s.paletteIdx||0,u=s.paletteNameMap=s.paletteNameMap||{};if(u.hasOwnProperty(n))return u[n];var f=o==null||!a?t:nU(a,o);if(f=f||t,!(!f||!f.length)){var v=f[l];return n&&(u[n]=v),s.paletteIdx=(l+1)%f.length,v}}function iU(r,e){e(r).paletteIdx=0,e(r).paletteNameMap={}}var Bd,lf,KM,QM="\0_ec_inner",oU=1,Xb=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.init=function(t,a,n,i,o,s){i=i||{},this.option=null,this._theme=new oe(i),this._locale=new oe(o),this._optionManager=s},e.prototype.setOption=function(t,a,n){var i=eL(a);this._optionManager.setOption(t,n,i),this._resetOption(null,i)},e.prototype.resetOption=function(t,a){return this._resetOption(t,eL(a))},e.prototype._resetOption=function(t,a){var n=!1,i=this._optionManager;if(!t||t==="recreate"){var o=i.mountOption(t==="recreate");!this.option||t==="recreate"?KM(this,o):(this.restoreData(),this._mergeOption(o,a)),n=!0}if((t==="timeline"||t==="media")&&this.restoreData(),!t||t==="recreate"||t==="timeline"){var s=i.getTimelineOption(this);s&&(n=!0,this._mergeOption(s,a))}if(!t||t==="recreate"||t==="media"){var l=i.getMediaOption(this);l.length&&P(l,function(u){n=!0,this._mergeOption(u,a)},this)}return n},e.prototype.mergeOption=function(t){this._mergeOption(t,null)},e.prototype._mergeOption=function(t,a){var n=this.option,i=this._componentsMap,o=this._componentsCount,s=[],l=xt(),u=a&&a.replaceMergeMainTypeMap;J9(this),P(t,function(v,d){v!=null&&(jt.hasClass(d)?d&&(s.push(d),l.set(d,!0)):n[d]=n[d]==null?Dt(v):zt(n[d],v,!0))}),u&&u.each(function(v,d){jt.hasClass(d)&&!l.get(d)&&(s.push(d),l.set(d,!0))}),jt.topologicalTravel(s,jt.getAllClassMainTypes(),f,this);function f(v){var d=rU(this,v,he(t[v])),p=i.get(v),y=p?u&&u.get(v)?"replaceMerge":"normalMerge":"replaceAll",m=b3(p,d,y);R8(m,v,jt),n[v]=null,i.set(v,null),o.set(v,0);var _=[],S=[],b=0,w;P(m,function(A,M){var C=A.existing,L=A.newOption;if(!L)C&&(C.mergeOption({},this),C.optionUpdated({},!1));else{var E=v==="series",R=jt.getClass(v,A.keyInfo.subType,!E);if(!R)return;if(v==="tooltip"){if(w)return;w=!0}if(C&&C.constructor===R)C.name=A.keyInfo.name,C.mergeOption(L,this),C.optionUpdated(L,!1);else{var N=et({componentIndex:M},A.keyInfo);C=new R(L,this,this,N),et(C,N),A.brandNew&&(C.__requireNewView=!0),C.init(L,this,this),C.optionUpdated(null,!0)}}C?(_.push(C.option),S.push(C),b++):(_.push(void 0),S.push(void 0))},this),n[v]=_,i.set(v,S),o.set(v,b),v==="series"&&Bd(this)}this._seriesIndices||Bd(this)},e.prototype.getOption=function(){var t=Dt(this.option);return P(t,function(a,n){if(jt.hasClass(n)){for(var i=he(a),o=i.length,s=!1,l=o-1;l>=0;l--)i[l]&&!lh(i[l])?s=!0:(i[l]=null,!s&&o--);i.length=o,t[n]=i}}),delete t[QM],t},e.prototype.getTheme=function(){return this._theme},e.prototype.getLocaleModel=function(){return this._locale},e.prototype.setUpdatePayload=function(t){this._payload=t},e.prototype.getUpdatePayload=function(){return this._payload},e.prototype.getComponent=function(t,a){var n=this._componentsMap.get(t);if(n){var i=n[a||0];if(i)return i;if(a==null){for(var o=0;o=e:t==="max"?r<=e:r===e}function pU(r,e){return r.join(",")===e.join(",")}var $a=P,ph=Tt,rL=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function k1(r){var e=r&&r.itemStyle;if(e)for(var t=0,a=rL.length;t=0;_--){var S=r[_];if(s||(y=S.data.rawIndexOf(S.stackedByDimension,p)),y>=0){var b=S.data.getByRawIndex(S.stackResultDimension,y);if(l==="all"||l==="positive"&&b>0||l==="negative"&&b<0||l==="samesign"&&d>=0&&b>0||l==="samesign"&&d<=0&&b<0){d=x8(d,b),m=b;break}}}return a[0]=d,a[1]=m,a})})}var hy=(function(){function r(e){this.data=e.data||(e.sourceFormat===Bn?{}:[]),this.sourceFormat=e.sourceFormat||RP,this.seriesLayoutBy=e.seriesLayoutBy||In,this.startIndex=e.startIndex||0,this.dimensionsDetectedCount=e.dimensionsDetectedCount,this.metaRawOption=e.metaRawOption;var t=this.dimensionsDefine=e.dimensionsDefine;if(t)for(var a=0;am&&(m=w)}p[0]=y,p[1]=m}},n=function(){return this._data?this._data.length/this._dimSize:0};uL=(e={},e[Cr+"_"+In]={pure:!0,appendData:i},e[Cr+"_"+Ju]={pure:!0,appendData:function(){throw new Error('Do not support appendData when set seriesLayoutBy: "row".')}},e[Xa]={pure:!0,appendData:i},e[Bn]={pure:!0,appendData:function(o){var s=this._data;P(o,function(l,u){for(var f=s[u]||(s[u]=[]),v=0;v<(l||[]).length;v++)f.push(l[v])})}},e[Ya]={appendData:i},e[wo]={persistent:!1,pure:!0,appendData:function(o){this._data=o},clean:function(){this._offset+=this.count(),this._data=null}},e);function i(o){for(var s=0;s=0&&(m=o.interpolatedValue[_])}return m!=null?m+"":""})}},r.prototype.getRawValue=function(e,t){return Pu(this.getData(t),e)},r.prototype.formatTooltip=function(e,t,a){},r})();function vL(r){var e,t;return Tt(r)?r.type&&(t=r):e=r,{text:e,frag:t}}function Kf(r){return new IU(r)}var IU=(function(){function r(e){e=e||{},this._reset=e.reset,this._plan=e.plan,this._count=e.count,this._onDirty=e.onDirty,this._dirty=!0}return r.prototype.perform=function(e){var t=this._upstream,a=e&&e.skip;if(this._dirty&&t){var n=this.context;n.data=n.outputData=t.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var i;this._plan&&!a&&(i=this._plan(this.context));var o=f(this._modBy),s=this._modDataCount||0,l=f(e&&e.modBy),u=e&&e.modDataCount||0;(o!==l||s!==u)&&(i="reset");function f(b){return!(b>=1)&&(b=1),b}var v;(this._dirty||i==="reset")&&(this._dirty=!1,v=this._doReset(a)),this._modBy=l,this._modDataCount=u;var d=e&&e.step;if(t?this._dueEnd=t._outputDueEnd:this._dueEnd=this._count?this._count(this.context):1/0,this._progress){var p=this._dueIndex,y=Math.min(d!=null?this._dueIndex+d:1/0,this._dueEnd);if(!a&&(v||p1&&a>0?s:o}};return i;function o(){return e=r?null:le},gte:function(r,e){return r>=e}},PU=(function(){function r(e,t){if(!Qt(t)){var a="";ne(a)}this._opFn=ZP[e],this._rvalFloat=mi(t)}return r.prototype.evaluate=function(e){return Qt(e)?this._opFn(e,this._rvalFloat):this._opFn(mi(e),this._rvalFloat)},r})(),WP=(function(){function r(e,t){var a=e==="desc";this._resultLT=a?1:-1,t==null&&(t=a?"min":"max"),this._incomparable=t==="min"?-1/0:1/0}return r.prototype.evaluate=function(e,t){var a=Qt(e)?e:mi(e),n=Qt(t)?t:mi(t),i=isNaN(a),o=isNaN(n);if(i&&(a=this._incomparable),o&&(n=this._incomparable),i&&o){var s=vt(e),l=vt(t);s&&(a=l?e:0),l&&(n=s?t:0)}return an?-this._resultLT:0},r})(),OU=(function(){function r(e,t){this._rval=t,this._isEQ=e,this._rvalTypeof=typeof t,this._rvalFloat=mi(t)}return r.prototype.evaluate=function(e){var t=e===this._rval;if(!t){var a=typeof e;a!==this._rvalTypeof&&(a==="number"||this._rvalTypeof==="number")&&(t=mi(e)===this._rvalFloat)}return this._isEQ?t:!t},r})();function zU(r,e){return r==="eq"||r==="ne"?new OU(r==="eq",e):pt(ZP,r)?new PU(r,e):null}var kU=(function(){function r(){}return r.prototype.getRawData=function(){throw new Error("not supported")},r.prototype.getRawDataItem=function(e){throw new Error("not supported")},r.prototype.cloneRawData=function(){},r.prototype.getDimensionInfo=function(e){},r.prototype.cloneAllDimensionInfo=function(){},r.prototype.count=function(){},r.prototype.retrieveValue=function(e,t){},r.prototype.retrieveValueFromItem=function(e,t){},r.prototype.convertValue=function(e,t){return To(e,t)},r})();function BU(r,e){var t=new kU,a=r.data,n=t.sourceFormat=r.sourceFormat,i=r.startIndex,o="";r.seriesLayoutBy!==In&&ne(o);var s=[],l={},u=r.dimensionsDefine;if(u)P(u,function(m,_){var S=m.name,b={index:_,name:S,displayName:m.displayName};if(s.push(b),S!=null){var w="";pt(l,S)&&ne(w),l[S]=b}});else for(var f=0;f65535?XU:ZU}function iu(){return[1/0,-1/0]}function WU(r){var e=r.constructor;return e===Array?r.slice():new e(r)}function gL(r,e,t,a,n){var i=KP[t||"float"];if(n){var o=r[e],s=o&&o.length;if(s!==a){for(var l=new i(a),u=0;u_[1]&&(_[1]=m)}return this._rawCount=this._count=l,{start:s,end:l}},r.prototype._initDataFromProvider=function(e,t,a){for(var n=this._provider,i=this._chunks,o=this._dimensions,s=o.length,l=this._rawExtent,u=st(o,function(b){return b.property}),f=0;fS[1]&&(S[1]=_)}}!n.persistent&&n.clean&&n.clean(),this._rawCount=this._count=t,this._extent=[]},r.prototype.count=function(){return this._count},r.prototype.get=function(e,t){if(!(t>=0&&t=0&&t=this._rawCount||e<0)return-1;if(!this._indices)return e;var t=this._indices,a=t[e];if(a!=null&&ae)i=o-1;else return o}return-1},r.prototype.indicesOfNearest=function(e,t,a){var n=this._chunks,i=n[e],o=[];if(!i)return o;a==null&&(a=1/0);for(var s=1/0,l=-1,u=0,f=0,v=this.count();f=0&&l<0)&&(s=y,l=p,u=0),p===l&&(o[u++]=f))}return o.length=u,o},r.prototype.getIndices=function(){var e,t=this._indices;if(t){var a=t.constructor,n=this._count;if(a===Array){e=new a(n);for(var i=0;i=v&&b<=d||isNaN(b))&&(l[u++]=m),m++}y=!0}else if(i===2){for(var _=p[n[0]],w=p[n[1]],A=e[n[1]][0],M=e[n[1]][1],S=0;S=v&&b<=d||isNaN(b))&&(C>=A&&C<=M||isNaN(C))&&(l[u++]=m),m++}y=!0}}if(!y)if(i===1)for(var S=0;S=v&&b<=d||isNaN(b))&&(l[u++]=L)}else for(var S=0;Se[N][1])&&(E=!1)}E&&(l[u++]=t.getRawIndex(S))}return uS[1]&&(S[1]=_)}}}},r.prototype.lttbDownSample=function(e,t){var a=this.clone([e],!0),n=a._chunks,i=n[e],o=this.count(),s=0,l=Math.floor(1/t),u=this.getRawIndex(0),f,v,d,p=new(cf(this._rawCount))(Math.min((Math.ceil(o/l)+2)*2,o));p[s++]=u;for(var y=1;yf&&(f=v,d=A)}O>0&&Of-y&&(l=f-y,s.length=l);for(var m=0;mv[1]&&(v[1]=S),d[p++]=b}return i._count=p,i._indices=d,i._updateGetRawIdx(),i},r.prototype.each=function(e,t){if(this._count)for(var a=e.length,n=this._chunks,i=0,o=this.count();il&&(l=v)}return o=[s,l],this._extent[e]=o,o},r.prototype.getRawDataItem=function(e){var t=this.getRawIndex(e);if(this._provider.persistent)return this._provider.getItem(t);for(var a=[],n=this._chunks,i=0;i=0?this._indices[e]:-1},r.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},r.internalField=(function(){function e(t,a,n,i){return To(t[i],this._dimensions[i])}G1={arrayRows:e,objectRows:function(t,a,n,i){return To(t[a],this._dimensions[i])},keyedColumns:e,original:function(t,a,n,i){var o=t&&(t.value==null?t:t.value);return To(o instanceof Array?o[i]:o,this._dimensions[i])},typedArray:function(t,a,n,i){return t[i]}}})(),r})(),QP=(function(){function r(e){this._sourceList=[],this._storeList=[],this._upstreamSignList=[],this._versionSignBase=0,this._dirty=!0,this._sourceHost=e}return r.prototype.dirty=function(){this._setLocalSource([],[]),this._storeList=[],this._dirty=!0},r.prototype._setLocalSource=function(e,t){this._sourceList=e,this._upstreamSignList=t,this._versionSignBase++,this._versionSignBase>9e10&&(this._versionSignBase=0)},r.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},r.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},r.prototype._createSource=function(){this._setLocalSource([],[]);var e=this._sourceHost,t=this._getUpstreamSourceManagers(),a=!!t.length,n,i;if(Vd(e)){var o=e,s=void 0,l=void 0,u=void 0;if(a){var f=t[0];f.prepareSource(),u=f.getSource(),s=u.data,l=u.sourceFormat,i=[f._getVersionSign()]}else s=o.get("data",!0),l=da(s)?wo:Ya,i=[];var v=this._getSourceMetaRawOption()||{},d=u&&u.metaRawOption||{},p=Ot(v.seriesLayoutBy,d.seriesLayoutBy)||null,y=Ot(v.sourceHeader,d.sourceHeader),m=Ot(v.dimensions,d.dimensions),_=p!==d.seriesLayoutBy||!!y!=!!d.sourceHeader||m;n=_?[iS(s,{seriesLayoutBy:p,sourceHeader:y,dimensions:m},l)]:[]}else{var S=e;if(a){var b=this._applyTransform(t);n=b.sourceList,i=b.upstreamSignList}else{var w=S.get("source",!0);n=[iS(w,this._getSourceMetaRawOption(),null)],i=[]}}this._setLocalSource(n,i)},r.prototype._applyTransform=function(e){var t=this._sourceHost,a=t.get("transform",!0),n=t.get("fromTransformResult",!0);if(n!=null){var i="";e.length!==1&&mL(i)}var o,s=[],l=[];return P(e,function(u){u.prepareSource();var f=u.getSource(n||0),v="";n!=null&&!f&&mL(v),s.push(f),l.push(u._getVersionSign())}),a?o=jU(a,s,{datasetIndex:t.componentIndex}):n!=null&&(o=[AU(s[0])]),{sourceList:o,upstreamSignList:l}},r.prototype._isDirty=function(){if(this._dirty)return!0;for(var e=this._getUpstreamSourceManagers(),t=0;t1||t>0&&!r.noHeader;return P(r.blocks,function(n){var i=rO(n);i>=e&&(e=i+ +(a&&(!i||sS(n)&&!n.noHeader)))}),e}return 0}function KU(r,e,t,a){var n=e.noHeader,i=JU(rO(e)),o=[],s=e.blocks||[];zr(!s||it(s)),s=s||[];var l=r.orderMode;if(e.sortBlocks&&l){s=s.slice();var u={valueAsc:"asc",valueDesc:"desc"};if(pt(u,l)){var f=new WP(u[l],null);s.sort(function(y,m){return f.evaluate(y.sortParam,m.sortParam)})}else l==="seriesDesc"&&s.reverse()}P(s,function(y,m){var _=e.valueFormatter,S=eO(y)(_?et(et({},r),{valueFormatter:_}):r,y,m>0?i.html:0,a);S!=null&&o.push(S)});var v=r.renderMode==="richText"?o.join(i.richText):lS(o.join(""),n?t:i.html);if(n)return v;var d=rS(e.header,"ordinal",r.useUTC),p=tO(a,r.renderMode).nameStyle;return r.renderMode==="richText"?aO(r,d,p)+i.richText+v:lS('
'+ca(d)+"
"+v,t)}function QU(r,e,t,a){var n=r.renderMode,i=e.noName,o=e.noValue,s=!e.markerType,l=e.name,u=r.useUTC,f=e.valueFormatter||r.valueFormatter||function(A){return A=it(A)?A:[A],st(A,function(M,C){return rS(M,it(p)?p[C]:p,u)})};if(!(i&&o)){var v=s?"":r.markupStyleCreator.makeTooltipMarker(e.markerType,e.markerColor||"#333",n),d=i?"":rS(l,"ordinal",u),p=e.valueType,y=o?[]:f(e.value),m=!s||!i,_=!s&&i,S=tO(a,n),b=S.nameStyle,w=S.valueStyle;return n==="richText"?(s?"":v)+(i?"":aO(r,d,b))+(o?"":rF(r,y,m,_,w)):lS((s?"":v)+(i?"":tF(d,!s,b))+(o?"":eF(y,m,_,w)),t)}}function _L(r,e,t,a,n,i){if(r){var o=eO(r),s={useUTC:n,renderMode:t,orderMode:a,markupStyleCreator:e,valueFormatter:r.valueFormatter};return o(s,r,0,i)}}function JU(r){return{html:qU[r],richText:$U[r]}}function lS(r,e){var t='
',a="margin: "+e+"px 0 0";return'
'+r+t+"
"}function tF(r,e,t){var a=e?"margin-left:2px":"";return''+ca(r)+""}function eF(r,e,t,a){var n=t?"10px":"20px",i=e?"float:right;margin-left:"+n:"";return r=it(r)?r:[r],''+st(r,function(o){return ca(o)}).join("  ")+""}function aO(r,e,t){return r.markupStyleCreator.wrapRichTextStyle(e,t)}function rF(r,e,t,a,n){var i=[n],o=a?10:20;return t&&i.push({padding:[0,0,0,o],align:"right"}),r.markupStyleCreator.wrapRichTextStyle(it(e)?e.join(" "):e,i)}function nO(r,e){var t=r.getData().getItemVisual(e,"style"),a=t[r.visualDrawType];return al(a)}function iO(r,e){var t=r.get("padding");return t??(e==="richText"?[8,10]:10)}var H1=(function(){function r(){this.richTextStyles={},this._nextStyleNameId=m3()}return r.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},r.prototype.makeTooltipMarker=function(e,t,a){var n=a==="richText"?this._generateStyleName():null,i=Z9({color:t,type:e,renderMode:a,markerId:n});return vt(i)?i:(this.richTextStyles[n]=i.style,i.content)},r.prototype.wrapRichTextStyle=function(e,t){var a={};it(t)?P(t,function(i){return et(a,i)}):et(a,t);var n=this._generateStyleName();return this.richTextStyles[n]=a,"{"+n+"|"+e+"}"},r})();function oO(r){var e=r.series,t=r.dataIndex,a=r.multipleSeries,n=e.getData(),i=n.mapDimensionsAll("defaultedTooltip"),o=i.length,s=e.getRawValue(t),l=it(s),u=nO(e,t),f,v,d,p;if(o>1||l&&!o){var y=aF(s,e,t,i,u);f=y.inlineValues,v=y.inlineValueTypes,d=y.blocks,p=y.inlineValues[0]}else if(o){var m=n.getDimensionInfo(i[0]);p=f=Pu(n,t,i[0]),v=m.type}else p=f=l?s[0]:s;var _=Tb(e),S=_&&e.name||"",b=n.getName(t),w=a?S:b;return ir("section",{header:S,noHeader:a||!_,sortParam:p,blocks:[ir("nameValue",{markerType:"item",markerColor:u,name:w,noName:!rn(w),value:f,valueType:v})].concat(d||[])})}function aF(r,e,t,a,n){var i=e.getData(),o=Nn(r,function(v,d,p){var y=i.getDimensionInfo(p);return v=v||y&&y.tooltip!==!1&&y.displayName!=null},!1),s=[],l=[],u=[];a.length?P(a,function(v){f(Pu(i,t,v),v)}):P(r,f);function f(v,d){var p=i.getDimensionInfo(d);!p||p.otherDims.tooltip===!1||(o?u.push(ir("nameValue",{markerType:"subItem",markerColor:n,name:p.displayName,value:v,valueType:p.type})):(s.push(v),l.push(p.type)))}return{inlineValues:s,inlineValueTypes:l,blocks:u}}var ro=Kt();function Gd(r,e){return r.getName(e)||r.getId(e)}var zp="__universalTransitionEnabled",Se=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t._selectedDataIndicesMap={},t}return e.prototype.init=function(t,a,n){this.seriesIndex=this.componentIndex,this.dataTask=Kf({count:iF,reset:oF}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(t,n);var i=ro(this).sourceManager=new QP(this);i.prepareSource();var o=this.getInitialData(t,n);SL(o,this),this.dataTask.context.data=o,ro(this).dataBeforeProcessed=o,xL(this),this._initSelectedMapFromData(o)},e.prototype.mergeDefaultAndTheme=function(t,a){var n=dh(this),i=n?Qu(t):{},o=this.subType;jt.hasClass(o)&&(o+="Series"),zt(t,a.getTheme().get(this.subType)),zt(t,this.getDefaultOption()),Js(t,"label",["show"]),this.fillDataTextStyle(t.data),n&&Ro(t,i,n)},e.prototype.mergeOption=function(t,a){t=zt(this.option,t,!0),this.fillDataTextStyle(t.data);var n=dh(this);n&&Ro(this.option,t,n);var i=ro(this).sourceManager;i.dirty(),i.prepareSource();var o=this.getInitialData(t,a);SL(o,this),this.dataTask.dirty(),this.dataTask.context.data=o,ro(this).dataBeforeProcessed=o,xL(this),this._initSelectedMapFromData(o)},e.prototype.fillDataTextStyle=function(t){if(t&&!da(t))for(var a=["show"],n=0;nthis.getShallow("animationThreshold")&&(a=!1),!!a},e.prototype.restoreData=function(){this.dataTask.dirty()},e.prototype.getColorFromPalette=function(t,a,n){var i=this.ecModel,o=Yb.prototype.getColorFromPalette.call(this,t,a,n);return o||(o=i.getColorFromPalette(t,a,n)),o},e.prototype.coordDimToDataDim=function(t){return this.getRawData().mapDimensionsAll(t)},e.prototype.getProgressive=function(){return this.get("progressive")},e.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},e.prototype.select=function(t,a){this._innerSelect(this.getData(a),t)},e.prototype.unselect=function(t,a){var n=this.option.selectedMap;if(n){var i=this.option.selectedMode,o=this.getData(a);if(i==="series"||n==="all"){this.option.selectedMap={},this._selectedDataIndicesMap={};return}for(var s=0;s=0&&n.push(o)}return n},e.prototype.isSelected=function(t,a){var n=this.option.selectedMap;if(!n)return!1;var i=this.getData(a);return(n==="all"||n[Gd(i,t)])&&!i.getItemModel(t).get(["select","disabled"])},e.prototype.isUniversalTransitionEnabled=function(){if(this[zp])return!0;var t=this.option.universalTransition;return t?t===!0?!0:t&&t.enabled:!1},e.prototype._innerSelect=function(t,a){var n,i,o=this.option,s=o.selectedMode,l=a.length;if(!(!s||!l)){if(s==="series")o.selectedMap="all";else if(s==="multiple"){Tt(o.selectedMap)||(o.selectedMap={});for(var u=o.selectedMap,f=0;f0&&this._innerSelect(t,a)}},e.registerClass=function(t){return jt.registerClass(t)},e.protoInitialize=(function(){var t=e.prototype;t.type="series.__base__",t.seriesIndex=0,t.ignoreStyleOnData=!1,t.hasSymbolVisual=!1,t.defaultSymbol="circle",t.visualStyleAccessPath="itemStyle",t.visualDrawType="fill"})(),e})(jt);Xe(Se,$b);Xe(Se,Yb);C3(Se,jt);function xL(r){var e=r.name;Tb(r)||(r.name=nF(r)||e)}function nF(r){var e=r.getRawData(),t=e.mapDimensionsAll("seriesName"),a=[];return P(t,function(n){var i=e.getDimensionInfo(n);i.displayName&&a.push(i.displayName)}),a.join(" ")}function iF(r){return r.model.getRawData().count()}function oF(r){var e=r.model;return e.setData(e.getRawData().cloneShallow()),sF}function sF(r,e){e.outputData&&r.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function SL(r,e){P(Xp(r.CHANGABLE_METHODS,r.DOWNSAMPLE_METHODS),function(t){r.wrapMethod(t,It(lF,e))})}function lF(r,e){var t=uS(r);return t&&t.setOutputEnd((e||this).count()),e}function uS(r){var e=(r.ecModel||{}).scheduler,t=e&&e.getPipeline(r.uid);if(t){var a=t.currentTask;if(a){var n=a.agentStubMap;n&&(a=n.get(r.uid))}return a}}var Ee=(function(){function r(){this.group=new Ct,this.uid=$u("viewComponent")}return r.prototype.init=function(e,t){},r.prototype.render=function(e,t,a,n){},r.prototype.dispose=function(e,t){},r.prototype.updateView=function(e,t,a,n){},r.prototype.updateLayout=function(e,t,a,n){},r.prototype.updateVisual=function(e,t,a,n){},r.prototype.toggleBlurSeries=function(e,t,a){},r.prototype.eachRendered=function(e){var t=this.group;t&&t.traverse(e)},r})();Db(Ee);qg(Ee);function tc(){var r=Kt();return function(e){var t=r(e),a=e.pipelineContext,n=!!t.large,i=!!t.progressiveRender,o=t.large=!!(a&&a.large),s=t.progressiveRender=!!(a&&a.progressiveRender);return(n!==o||i!==s)&&"reset"}}var sO=Kt(),uF=tc(),de=(function(){function r(){this.group=new Ct,this.uid=$u("viewChart"),this.renderTask=Kf({plan:cF,reset:fF}),this.renderTask.context={view:this}}return r.prototype.init=function(e,t){},r.prototype.render=function(e,t,a,n){},r.prototype.highlight=function(e,t,a,n){var i=e.getData(n&&n.dataType);i&&wL(i,n,"emphasis")},r.prototype.downplay=function(e,t,a,n){var i=e.getData(n&&n.dataType);i&&wL(i,n,"normal")},r.prototype.remove=function(e,t){this.group.removeAll()},r.prototype.dispose=function(e,t){},r.prototype.updateView=function(e,t,a,n){this.render(e,t,a,n)},r.prototype.updateLayout=function(e,t,a,n){this.render(e,t,a,n)},r.prototype.updateVisual=function(e,t,a,n){this.render(e,t,a,n)},r.prototype.eachRendered=function(e){Oo(this.group,e)},r.markUpdateMethod=function(e,t){sO(e).updateMethod=t},r.protoInitialize=(function(){var e=r.prototype;e.type="chart"})(),r})();function bL(r,e,t){r&&ch(r)&&(e==="emphasis"?_i:xi)(r,t)}function wL(r,e,t){var a=tl(r,e),n=e&&e.highlightKey!=null?ZH(e.highlightKey):null;a!=null?P(he(a),function(i){bL(r.getItemGraphicEl(i),t,n)}):r.eachItemGraphicEl(function(i){bL(i,t,n)})}Db(de);qg(de);function cF(r){return uF(r.model)}function fF(r){var e=r.model,t=r.ecModel,a=r.api,n=r.payload,i=e.pipelineContext.progressiveRender,o=r.view,s=n&&sO(n).updateMethod,l=i?"incrementalPrepareRender":s&&o[s]?s:"render";return l!=="render"&&o[l](e,t,a,n),hF[l]}var hF={incrementalPrepareRender:{progress:function(r,e){e.view.incrementalRender(r,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(r,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},cg="\0__throttleOriginMethod",TL="\0__throttleRate",AL="\0__throttleType";function Qb(r,e,t){var a,n=0,i=0,o=null,s,l,u,f;e=e||0;function v(){i=new Date().getTime(),o=null,r.apply(l,u||[])}var d=function(){for(var p=[],y=0;y=0?v():o=setTimeout(v,-s),n=a};return d.clear=function(){o&&(clearTimeout(o),o=null)},d.debounceNextCall=function(p){f=p},d}function ec(r,e,t,a){var n=r[e];if(n){var i=n[cg]||n,o=n[AL],s=n[TL];if(s!==t||o!==a){if(t==null||!a)return r[e]=i;n=r[e]=Qb(i,t,a==="debounce"),n[cg]=i,n[AL]=a,n[TL]=t}return n}}function gh(r,e){var t=r[e];t&&t[cg]&&(t.clear&&t.clear(),r[e]=t[cg])}var DL=Kt(),CL={itemStyle:el(vP,!0),lineStyle:el(hP,!0)},vF={lineStyle:"stroke",itemStyle:"fill"};function lO(r,e){var t=r.visualStyleMapper||CL[e];return t||(console.warn("Unknown style type '"+e+"'."),CL.itemStyle)}function uO(r,e){var t=r.visualDrawType||vF[e];return t||(console.warn("Unknown style type '"+e+"'."),"fill")}var dF={createOnAllSeries:!0,performRawSeries:!0,reset:function(r,e){var t=r.getData(),a=r.visualStyleAccessPath||"itemStyle",n=r.getModel(a),i=lO(r,a),o=i(n),s=n.getShallow("decal");s&&(t.setVisual("decal",s),s.dirty=!0);var l=uO(r,a),u=o[l],f=bt(u)?u:null,v=o.fill==="auto"||o.stroke==="auto";if(!o[l]||f||v){var d=r.getColorFromPalette(r.name,null,e.getSeriesCount());o[l]||(o[l]=d,t.setVisual("colorFromPalette",!0)),o.fill=o.fill==="auto"||bt(o.fill)?d:o.fill,o.stroke=o.stroke==="auto"||bt(o.stroke)?d:o.stroke}if(t.setVisual("style",o),t.setVisual("drawType",l),!e.isSeriesFiltered(r)&&f)return t.setVisual("colorFromPalette",!1),{dataEach:function(p,y){var m=r.getDataParams(y),_=et({},o);_[l]=f(m),p.setItemVisual(y,"style",_)}}}},ff=new oe,pF={createOnAllSeries:!0,performRawSeries:!0,reset:function(r,e){if(!(r.ignoreStyleOnData||e.isSeriesFiltered(r))){var t=r.getData(),a=r.visualStyleAccessPath||"itemStyle",n=lO(r,a),i=t.getVisual("drawType");return{dataEach:t.hasItemOption?function(o,s){var l=o.getRawDataItem(s);if(l&&l[a]){ff.option=l[a];var u=n(ff),f=o.ensureUniqueItemVisual(s,"style");et(f,u),ff.option.decal&&(o.setItemVisual(s,"decal",ff.option.decal),ff.option.decal.dirty=!0),i in u&&o.setItemVisual(s,"colorFromPalette",!1)}}:null}}}},gF={performRawSeries:!0,overallReset:function(r){var e=xt();r.eachSeries(function(t){var a=t.getColorBy();if(!t.isColorBySeries()){var n=t.type+"-"+a,i=e.get(n);i||(i={},e.set(n,i)),DL(t).scope=i}}),r.eachSeries(function(t){if(!(t.isColorBySeries()||r.isSeriesFiltered(t))){var a=t.getRawData(),n={},i=t.getData(),o=DL(t).scope,s=t.visualStyleAccessPath||"itemStyle",l=uO(t,s);i.each(function(u){var f=i.getRawIndex(u);n[f]=u}),a.each(function(u){var f=n[u],v=i.getItemVisual(f,"colorFromPalette");if(v){var d=i.ensureUniqueItemVisual(f,"style"),p=a.getName(u)||u+"",y=a.count();d[l]=t.getColorFromPalette(p,o,y)}})}})}},Hd=Math.PI;function yF(r,e){e=e||{},wt(e,{text:"loading",textColor:"#000",fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#5470c6",spinnerRadius:10,lineWidth:5,zlevel:0});var t=new Ct,a=new Wt({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4});t.add(a);var n=new $t({style:{text:e.text,fill:e.textColor,fontSize:e.fontSize,fontWeight:e.fontWeight,fontStyle:e.fontStyle,fontFamily:e.fontFamily},zlevel:e.zlevel,z:10001}),i=new Wt({style:{fill:"none"},textContent:n,textConfig:{position:"right",distance:10},zlevel:e.zlevel,z:10001});t.add(i);var o;return e.showSpinner&&(o=new ry({shape:{startAngle:-Hd/2,endAngle:-Hd/2+.1,r:e.spinnerRadius},style:{stroke:e.color,lineCap:"round",lineWidth:e.lineWidth},zlevel:e.zlevel,z:10001}),o.animateShape(!0).when(1e3,{endAngle:Hd*3/2}).start("circularInOut"),o.animateShape(!0).when(1e3,{startAngle:Hd*3/2}).delay(300).start("circularInOut"),t.add(o)),t.resize=function(){var s=n.getBoundingRect().width,l=e.showSpinner?e.spinnerRadius:0,u=(r.getWidth()-l*2-(e.showSpinner&&s?10:0)-s)/2-(e.showSpinner&&s?0:5+s/2)+(e.showSpinner?0:s/2)+(s?0:l),f=r.getHeight()/2;e.showSpinner&&o.setShape({cx:u,cy:f}),i.setShape({x:u-l,y:f-l,width:l*2,height:l*2}),a.setShape({x:0,y:0,width:r.getWidth(),height:r.getHeight()})},t.resize(),t}var cO=(function(){function r(e,t,a,n){this._stageTaskMap=xt(),this.ecInstance=e,this.api=t,a=this._dataProcessorHandlers=a.slice(),n=this._visualHandlers=n.slice(),this._allHandlers=a.concat(n)}return r.prototype.restoreData=function(e,t){e.restoreData(t),this._stageTaskMap.each(function(a){var n=a.overallTask;n&&n.dirty()})},r.prototype.getPerformArgs=function(e,t){if(e.__pipeline){var a=this._pipelineMap.get(e.__pipeline.id),n=a.context,i=!t&&a.progressiveEnabled&&(!n||n.progressiveRender)&&e.__idxInPipeline>a.blockIndex,o=i?a.step:null,s=n&&n.modDataCount,l=s!=null?Math.ceil(s/o):null;return{step:o,modBy:l,modDataCount:s}}},r.prototype.getPipeline=function(e){return this._pipelineMap.get(e)},r.prototype.updateStreamModes=function(e,t){var a=this._pipelineMap.get(e.uid),n=e.getData(),i=n.count(),o=a.progressiveEnabled&&t.incrementalPrepareRender&&i>=a.threshold,s=e.get("large")&&i>=e.get("largeThreshold"),l=e.get("progressiveChunkMode")==="mod"?i:null;e.pipelineContext=a.context={progressiveRender:o,modDataCount:l,large:s}},r.prototype.restorePipelines=function(e){var t=this,a=t._pipelineMap=xt();e.eachSeries(function(n){var i=n.getProgressive(),o=n.uid;a.set(o,{id:o,head:null,tail:null,threshold:n.getProgressiveThreshold(),progressiveEnabled:i&&!(n.preventIncremental&&n.preventIncremental()),blockIndex:-1,step:Math.round(i||700),count:0}),t._pipe(n,n.dataTask)})},r.prototype.prepareStageTasks=function(){var e=this._stageTaskMap,t=this.api.getModel(),a=this.api;P(this._allHandlers,function(n){var i=e.get(n.uid)||e.set(n.uid,{}),o="";zr(!(n.reset&&n.overallReset),o),n.reset&&this._createSeriesStageTask(n,i,t,a),n.overallReset&&this._createOverallStageTask(n,i,t,a)},this)},r.prototype.prepareView=function(e,t,a,n){var i=e.renderTask,o=i.context;o.model=t,o.ecModel=a,o.api=n,i.__block=!e.incrementalPrepareRender,this._pipe(t,i)},r.prototype.performDataProcessorTasks=function(e,t){this._performStageTasks(this._dataProcessorHandlers,e,t,{block:!0})},r.prototype.performVisualTasks=function(e,t,a){this._performStageTasks(this._visualHandlers,e,t,a)},r.prototype._performStageTasks=function(e,t,a,n){n=n||{};var i=!1,o=this;P(e,function(l,u){if(!(n.visualType&&n.visualType!==l.visualType)){var f=o._stageTaskMap.get(l.uid),v=f.seriesTaskMap,d=f.overallTask;if(d){var p,y=d.agentStubMap;y.each(function(_){s(n,_)&&(_.dirty(),p=!0)}),p&&d.dirty(),o.updatePayload(d,a);var m=o.getPerformArgs(d,n.block);y.each(function(_){_.perform(m)}),d.perform(m)&&(i=!0)}else v&&v.each(function(_,S){s(n,_)&&_.dirty();var b=o.getPerformArgs(_,n.block);b.skip=!l.performRawSeries&&t.isSeriesFiltered(_.context.model),o.updatePayload(_,a),_.perform(b)&&(i=!0)})}});function s(l,u){return l.setDirty&&(!l.dirtyMap||l.dirtyMap.get(u.__pipeline.id))}this.unfinished=i||this.unfinished},r.prototype.performSeriesTasks=function(e){var t;e.eachSeries(function(a){t=a.dataTask.perform()||t}),this.unfinished=t||this.unfinished},r.prototype.plan=function(){this._pipelineMap.each(function(e){var t=e.tail;do{if(t.__block){e.blockIndex=t.__idxInPipeline;break}t=t.getUpstream()}while(t)})},r.prototype.updatePayload=function(e,t){t!=="remain"&&(e.context.payload=t)},r.prototype._createSeriesStageTask=function(e,t,a,n){var i=this,o=t.seriesTaskMap,s=t.seriesTaskMap=xt(),l=e.seriesType,u=e.getTargetSeries;e.createOnAllSeries?a.eachRawSeries(f):l?a.eachRawSeriesByType(l,f):u&&u(a,n).each(f);function f(v){var d=v.uid,p=s.set(d,o&&o.get(d)||Kf({plan:bF,reset:wF,count:AF}));p.context={model:v,ecModel:a,api:n,useClearVisual:e.isVisual&&!e.isLayout,plan:e.plan,reset:e.reset,scheduler:i},i._pipe(v,p)}},r.prototype._createOverallStageTask=function(e,t,a,n){var i=this,o=t.overallTask=t.overallTask||Kf({reset:mF});o.context={ecModel:a,api:n,overallReset:e.overallReset,scheduler:i};var s=o.agentStubMap,l=o.agentStubMap=xt(),u=e.seriesType,f=e.getTargetSeries,v=!0,d=!1,p="";zr(!e.createOnAllSeries,p),u?a.eachRawSeriesByType(u,y):f?f(a,n).each(y):(v=!1,P(a.getSeries(),y));function y(m){var _=m.uid,S=l.set(_,s&&s.get(_)||(d=!0,Kf({reset:_F,onDirty:SF})));S.context={model:m,overallProgress:v},S.agent=o,S.__block=v,i._pipe(m,S)}d&&o.dirty()},r.prototype._pipe=function(e,t){var a=e.uid,n=this._pipelineMap.get(a);!n.head&&(n.head=t),n.tail&&n.tail.pipe(t),n.tail=t,t.__idxInPipeline=n.count++,t.__pipeline=n},r.wrapStageHandler=function(e,t){return bt(e)&&(e={overallReset:e,seriesType:DF(e)}),e.uid=$u("stageHandler"),t&&(e.visualType=t),e},r})();function mF(r){r.overallReset(r.ecModel,r.api,r.payload)}function _F(r){return r.overallProgress&&xF}function xF(){this.agent.dirty(),this.getDownstream().dirty()}function SF(){this.agent&&this.agent.dirty()}function bF(r){return r.plan?r.plan(r.model,r.ecModel,r.api,r.payload):null}function wF(r){r.useClearVisual&&r.data.clearAllVisual();var e=r.resetDefines=he(r.reset(r.model,r.ecModel,r.api,r.payload));return e.length>1?st(e,function(t,a){return fO(a)}):TF}var TF=fO(0);function fO(r){return function(e,t){var a=t.data,n=t.resetDefines[r];if(n&&n.dataEach)for(var i=e.start;i0&&p===u.length-d.length){var y=u.slice(0,p);y!=="data"&&(t.mainType=y,t[d.toLowerCase()]=l,f=!0)}}s.hasOwnProperty(u)&&(a[u]=l,f=!0),f||(n[u]=l)})}return{cptQuery:t,dataQuery:a,otherQuery:n}},r.prototype.filter=function(e,t){var a=this.eventInfo;if(!a)return!0;var n=a.targetEl,i=a.packedEvent,o=a.model,s=a.view;if(!o||!s)return!0;var l=t.cptQuery,u=t.dataQuery;return f(l,o,"mainType")&&f(l,o,"subType")&&f(l,o,"index","componentIndex")&&f(l,o,"name")&&f(l,o,"id")&&f(u,i,"name")&&f(u,i,"dataIndex")&&f(u,i,"dataType")&&(!s.filterForExposedEvent||s.filterForExposedEvent(e,t.otherQuery,n,i));function f(v,d,p,y){return v[p]==null||d[y||p]===v[p]}},r.prototype.afterTrigger=function(){this.eventInfo=null},r})(),cS=["symbol","symbolSize","symbolRotate","symbolOffset"],RL=cS.concat(["symbolKeepAspect"]),LF={createOnAllSeries:!0,performRawSeries:!0,reset:function(r,e){var t=r.getData();if(r.legendIcon&&t.setVisual("legendIcon",r.legendIcon),!r.hasSymbolVisual)return;for(var a={},n={},i=!1,o=0;o=0&&Gs(l)?l:.5;var u=r.createRadialGradient(o,s,0,o,s,l);return u}function fS(r,e,t){for(var a=e.type==="radial"?jF(r,e,t):FF(r,e,t),n=e.colorStops,i=0;i0)?null:r==="dashed"?[4*e,2*e]:r==="dotted"?[e]:Qt(r)?[r]:it(r)?r:null}function t2(r){var e=r.style,t=e.lineDash&&e.lineWidth>0&&XF(e.lineDash,e.lineWidth),a=e.lineDashOffset;if(t){var n=e.strokeNoScale&&r.getLineScale?r.getLineScale():1;n&&n!==1&&(t=st(t,function(i){return i/n}),a/=n)}return[t,a]}var ZF=new kn(!0);function vg(r){var e=r.stroke;return!(e==null||e==="none"||!(r.lineWidth>0))}function IL(r){return typeof r=="string"&&r!=="none"}function dg(r){var e=r.fill;return e!=null&&e!=="none"}function NL(r,e){if(e.fillOpacity!=null&&e.fillOpacity!==1){var t=r.globalAlpha;r.globalAlpha=e.fillOpacity*e.opacity,r.fill(),r.globalAlpha=t}else r.fill()}function PL(r,e){if(e.strokeOpacity!=null&&e.strokeOpacity!==1){var t=r.globalAlpha;r.globalAlpha=e.strokeOpacity*e.opacity,r.stroke(),r.globalAlpha=t}else r.stroke()}function hS(r,e,t){var a=Cb(e.image,e.__image,t);if($g(a)){var n=r.createPattern(a,e.repeat||"repeat");if(typeof DOMMatrix=="function"&&n&&n.setTransform){var i=new DOMMatrix;i.translateSelf(e.x||0,e.y||0),i.rotateSelf(0,0,(e.rotation||0)*wp),i.scaleSelf(e.scaleX||1,e.scaleY||1),n.setTransform(i)}return n}}function WF(r,e,t,a){var n,i=vg(t),o=dg(t),s=t.strokePercent,l=s<1,u=!e.path;(!e.silent||l)&&u&&e.createPathProxy();var f=e.path||ZF,v=e.__dirty;if(!a){var d=t.fill,p=t.stroke,y=o&&!!d.colorStops,m=i&&!!p.colorStops,_=o&&!!d.image,S=i&&!!p.image,b=void 0,w=void 0,A=void 0,M=void 0,C=void 0;(y||m)&&(C=e.getBoundingRect()),y&&(b=v?fS(r,d,C):e.__canvasFillGradient,e.__canvasFillGradient=b),m&&(w=v?fS(r,p,C):e.__canvasStrokeGradient,e.__canvasStrokeGradient=w),_&&(A=v||!e.__canvasFillPattern?hS(r,d,e):e.__canvasFillPattern,e.__canvasFillPattern=A),S&&(M=v||!e.__canvasStrokePattern?hS(r,p,e):e.__canvasStrokePattern,e.__canvasStrokePattern=A),y?r.fillStyle=b:_&&(A?r.fillStyle=A:o=!1),m?r.strokeStyle=w:S&&(M?r.strokeStyle=M:i=!1)}var L=e.getGlobalScale();f.setScale(L[0],L[1],e.segmentIgnoreThreshold);var E,R;r.setLineDash&&t.lineDash&&(n=t2(e),E=n[0],R=n[1]);var N=!0;(u||v&mu)&&(f.setDPR(r.dpr),l?f.setContext(null):(f.setContext(r),N=!1),f.reset(),e.buildPath(f,e.shape,a),f.toStatic(),e.pathUpdated()),N&&f.rebuildPath(r,l?s:1),E&&(r.setLineDash(E),r.lineDashOffset=R),a||(t.strokeFirst?(i&&PL(r,t),o&&NL(r,t)):(o&&NL(r,t),i&&PL(r,t))),E&&r.setLineDash([])}function qF(r,e,t){var a=e.__image=Cb(t.image,e.__image,e,e.onload);if(!(!a||!$g(a))){var n=t.x||0,i=t.y||0,o=e.getWidth(),s=e.getHeight(),l=a.width/a.height;if(o==null&&s!=null?o=s*l:s==null&&o!=null?s=o/l:o==null&&s==null&&(o=a.width,s=a.height),t.sWidth&&t.sHeight){var u=t.sx||0,f=t.sy||0;r.drawImage(a,u,f,t.sWidth,t.sHeight,n,i,o,s)}else if(t.sx&&t.sy){var u=t.sx,f=t.sy,v=o-u,d=s-f;r.drawImage(a,u,f,v,d,n,i,o,s)}else r.drawImage(a,n,i,o,s)}}function $F(r,e,t){var a,n=t.text;if(n!=null&&(n+=""),n){r.font=t.font||Co,r.textAlign=t.textAlign,r.textBaseline=t.textBaseline;var i=void 0,o=void 0;r.setLineDash&&t.lineDash&&(a=t2(e),i=a[0],o=a[1]),i&&(r.setLineDash(i),r.lineDashOffset=o),t.strokeFirst?(vg(t)&&r.strokeText(n,t.x,t.y),dg(t)&&r.fillText(n,t.x,t.y)):(dg(t)&&r.fillText(n,t.x,t.y),vg(t)&&r.strokeText(n,t.x,t.y)),i&&r.setLineDash([])}}var OL=["shadowBlur","shadowOffsetX","shadowOffsetY"],zL=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function yO(r,e,t,a,n){var i=!1;if(!a&&(t=t||{},e===t))return!1;if(a||e.opacity!==t.opacity){Qr(r,n),i=!0;var o=Math.max(Math.min(e.opacity,1),0);r.globalAlpha=isNaN(o)?Ys.opacity:o}(a||e.blend!==t.blend)&&(i||(Qr(r,n),i=!0),r.globalCompositeOperation=e.blend||Ys.blend);for(var s=0;s0&&t.unfinished);t.unfinished||this._zr.flush()}}},e.prototype.getDom=function(){return this._dom},e.prototype.getId=function(){return this.id},e.prototype.getZr=function(){return this._zr},e.prototype.isSSR=function(){return this._ssr},e.prototype.setOption=function(t,a,n){if(!this[Tr]){if(this._disposed){this.id;return}var i,o,s;if(Tt(a)&&(n=a.lazyUpdate,i=a.silent,o=a.replaceMerge,s=a.transition,a=a.notMerge),this[Tr]=!0,!this._model||a){var l=new fU(this._api),u=this._theme,f=this._model=new Xb;f.scheduler=this._scheduler,f.ssr=this._ssr,f.init(null,null,null,u,this._locale,l)}this._model.setOption(t,{replaceMerge:o},dS);var v={seriesTransition:s,optionChanged:!0};if(n)this[qr]={silent:i,updateParams:v},this[Tr]=!1,this.getZr().wakeUp();else{try{su(this),ao.update.call(this,null,v)}catch(d){throw this[qr]=null,this[Tr]=!1,d}this._ssr||this._zr.flush(),this[qr]=null,this[Tr]=!1,hf.call(this,i),vf.call(this,i)}}},e.prototype.setTheme=function(){},e.prototype.getModel=function(){return this._model},e.prototype.getOption=function(){return this._model&&this._model.getOption()},e.prototype.getWidth=function(){return this._zr.getWidth()},e.prototype.getHeight=function(){return this._zr.getHeight()},e.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||Ft.hasGlobalWindow&&window.devicePixelRatio||1},e.prototype.getRenderedCanvas=function(t){return this.renderToCanvas(t)},e.prototype.renderToCanvas=function(t){t=t||{};var a=this._zr.painter;return a.getRenderedCanvas({backgroundColor:t.backgroundColor||this._model.get("backgroundColor"),pixelRatio:t.pixelRatio||this.getDevicePixelRatio()})},e.prototype.renderToSVGString=function(t){t=t||{};var a=this._zr.painter;return a.renderToString({useViewBox:t.useViewBox})},e.prototype.getSvgDataURL=function(){if(Ft.svgSupported){var t=this._zr,a=t.storage.getDisplayList();return P(a,function(n){n.stopAnimation(null,!0)}),t.painter.toDataURL()}},e.prototype.getDataURL=function(t){if(this._disposed){this.id;return}t=t||{};var a=t.excludeComponents,n=this._model,i=[],o=this;P(a,function(l){n.eachComponent({mainType:l},function(u){var f=o._componentsMap[u.__viewId];f.group.ignore||(i.push(f),f.group.ignore=!0)})});var s=this._zr.painter.getType()==="svg"?this.getSvgDataURL():this.renderToCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return P(i,function(l){l.group.ignore=!1}),s},e.prototype.getConnectedDataURL=function(t){if(this._disposed){this.id;return}var a=t.type==="svg",n=this.group,i=Math.min,o=Math.max,s=1/0;if(KL[n]){var l=s,u=s,f=-s,v=-s,d=[],p=t&&t.pixelRatio||this.getDevicePixelRatio();P(Jf,function(w,A){if(w.group===n){var M=a?w.getZr().painter.getSvgDom().innerHTML:w.renderToCanvas(Dt(t)),C=w.getDom().getBoundingClientRect();l=i(C.left,l),u=i(C.top,u),f=o(C.right,f),v=o(C.bottom,v),d.push({dom:M,left:C.left,top:C.top})}}),l*=p,u*=p,f*=p,v*=p;var y=f-l,m=v-u,_=Mo.createCanvas(),S=tM(_,{renderer:a?"svg":"canvas"});if(S.resize({width:y,height:m}),a){var b="";return P(d,function(w){var A=w.left-l,M=w.top-u;b+=''+w.dom+""}),S.painter.getSvgRoot().innerHTML=b,t.connectedBackgroundColor&&S.painter.setBackgroundColor(t.connectedBackgroundColor),S.refreshImmediately(),S.painter.toDataURL()}else return t.connectedBackgroundColor&&S.add(new Wt({shape:{x:0,y:0,width:y,height:m},style:{fill:t.connectedBackgroundColor}})),P(d,function(w){var A=new hr({style:{x:w.left*p-l,y:w.top*p-u,image:w.dom}});S.add(A)}),S.refreshImmediately(),_.toDataURL("image/"+(t&&t.type||"png"))}else return this.getDataURL(t)},e.prototype.convertToPixel=function(t,a){return X1(this,"convertToPixel",t,a)},e.prototype.convertFromPixel=function(t,a){return X1(this,"convertFromPixel",t,a)},e.prototype.containPixel=function(t,a){if(this._disposed){this.id;return}var n=this._model,i,o=Xf(n,t);return P(o,function(s,l){l.indexOf("Models")>=0&&P(s,function(u){var f=u.coordinateSystem;if(f&&f.containPoint)i=i||!!f.containPoint(a);else if(l==="seriesModels"){var v=this._chartsMap[u.__viewId];v&&v.containPoint&&(i=i||v.containPoint(a,u))}},this)},this),!!i},e.prototype.getVisual=function(t,a){var n=this._model,i=Xf(n,t,{defaultMainType:"series"}),o=i.seriesModel,s=o.getData(),l=i.hasOwnProperty("dataIndexInside")?i.dataIndexInside:i.hasOwnProperty("dataIndex")?s.indexOfRawIndex(i.dataIndex):null;return l!=null?Jb(s,l,a):Fh(s,a)},e.prototype.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},e.prototype.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]},e.prototype._initEvents=function(){var t=this;P(Sj,function(a){var n=function(i){var o=t.getModel(),s=i.target,l,u=a==="globalout";if(u?l={}:s&&Vs(s,function(y){var m=Rt(y);if(m&&m.dataIndex!=null){var _=m.dataModel||o.getSeriesByIndex(m.seriesIndex);return l=_&&_.getDataParams(m.dataIndex,m.dataType,s)||{},!0}else if(m.eventData)return l=et({},m.eventData),!0},!0),l){var f=l.componentType,v=l.componentIndex;(f==="markLine"||f==="markPoint"||f==="markArea")&&(f="series",v=l.seriesIndex);var d=f&&v!=null&&o.getComponent(f,v),p=d&&t[d.mainType==="series"?"_chartsMap":"_componentsMap"][d.__viewId];l.event=i,l.type=a,t._$eventProcessor.eventInfo={targetEl:s,packedEvent:l,model:d,view:p},t.trigger(a,l)}};n.zrEventfulCallAtLast=!0,t._zr.on(a,n,t)}),P(Qf,function(a,n){t._messageCenter.on(n,function(i){this.trigger(n,i)},t)}),P(["selectchanged"],function(a){t._messageCenter.on(a,function(n){this.trigger(a,n)},t)}),RF(this._messageCenter,this,this._api)},e.prototype.isDisposed=function(){return this._disposed},e.prototype.clear=function(){if(this._disposed){this.id;return}this.setOption({series:[]},!0)},e.prototype.dispose=function(){if(this._disposed){this.id;return}this._disposed=!0;var t=this.getDom();t&&T3(this.getDom(),a2,"");var a=this,n=a._api,i=a._model;P(a._componentsViews,function(o){o.dispose(i,n)}),P(a._chartsViews,function(o){o.dispose(i,n)}),a._zr.dispose(),a._dom=a._model=a._chartsMap=a._componentsMap=a._chartsViews=a._componentsViews=a._scheduler=a._api=a._zr=a._throttledZrFlush=a._theme=a._coordSysMgr=a._messageCenter=null,delete Jf[a.id]},e.prototype.resize=function(t){if(!this[Tr]){if(this._disposed){this.id;return}this._zr.resize(t);var a=this._model;if(this._loadingFX&&this._loadingFX.resize(),!!a){var n=a.resetOption("media"),i=t&&t.silent;this[qr]&&(i==null&&(i=this[qr].silent),n=!0,this[qr]=null),this[Tr]=!0;try{n&&su(this),ao.update.call(this,{type:"resize",animation:et({duration:0},t&&t.animation)})}catch(o){throw this[Tr]=!1,o}this[Tr]=!1,hf.call(this,i),vf.call(this,i)}}},e.prototype.showLoading=function(t,a){if(this._disposed){this.id;return}if(Tt(t)&&(a=t,t=""),t=t||"default",this.hideLoading(),!!pS[t]){var n=pS[t](this._api,a),i=this._zr;this._loadingFX=n,i.add(n)}},e.prototype.hideLoading=function(){if(this._disposed){this.id;return}this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},e.prototype.makeActionFromEvent=function(t){var a=et({},t);return a.type=Qf[t.type],a},e.prototype.dispatchAction=function(t,a){if(this._disposed){this.id;return}if(Tt(a)||(a={silent:!!a}),!!pg[t.type]&&this._model){if(this[Tr]){this._pendingActions.push(t);return}var n=a.silent;W1.call(this,t,n);var i=a.flush;i?this._zr.flush():i!==!1&&Ft.browser.weChat&&this._throttledZrFlush(),hf.call(this,n),vf.call(this,n)}},e.prototype.updateLabelLayout=function(){tn.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},e.prototype.appendData=function(t){if(this._disposed){this.id;return}var a=t.seriesIndex,n=this.getModel(),i=n.getSeriesByIndex(a);i.appendData(t),this._scheduler.unfinished=!0,this.getZr().wakeUp()},e.internalField=(function(){su=function(v){var d=v._scheduler;d.restorePipelines(v._model),d.prepareStageTasks(),Y1(v,!0),Y1(v,!1),d.plan()},Y1=function(v,d){for(var p=v._model,y=v._scheduler,m=d?v._componentsViews:v._chartsViews,_=d?v._componentsMap:v._chartsMap,S=v._zr,b=v._api,w=0;wd.get("hoverLayerThreshold")&&!Ft.node&&!Ft.worker&&d.eachSeries(function(_){if(!_.preventUsingHoverLayer){var S=v._chartsMap[_.__viewId];S.__alive&&S.eachRendered(function(b){b.states.emphasis&&(b.states.emphasis.hoverLayer=!0)})}})}function o(v,d){var p=v.get("blendMode")||null;d.eachRendered(function(y){y.isGroup||(y.style.blend=p)})}function s(v,d){if(!v.preventAutoZ){var p=v.get("z")||0,y=v.get("zlevel")||0;d.eachRendered(function(m){return l(m,p,y,-1/0),!0})}}function l(v,d,p,y){var m=v.getTextContent(),_=v.getTextGuideLine(),S=v.isGroup;if(S)for(var b=v.childrenRef(),w=0;w0?{duration:m,delay:p.get("delay"),easing:p.get("easing")}:null;d.eachRendered(function(S){if(S.states&&S.states.emphasis){if(Mu(S))return;if(S instanceof Ut&&WH(S),S.__dirty){var b=S.prevStates;b&&S.useStates(b)}if(y){S.stateTransition=_;var w=S.getTextContent(),A=S.getTextGuideLine();w&&(w.stateTransition=_),A&&(A.stateTransition=_)}S.__dirty&&n(S)}})}qL=function(v){return new((function(d){$(p,d);function p(){return d!==null&&d.apply(this,arguments)||this}return p.prototype.getCoordinateSystems=function(){return v._coordSysMgr.getCoordinateSystems()},p.prototype.getComponentByElement=function(y){for(;y;){var m=y.__ecComponentInfo;if(m!=null)return v._model.getComponent(m.mainType,m.index);y=y.parent}},p.prototype.enterEmphasis=function(y,m){_i(y,m),Ca(v)},p.prototype.leaveEmphasis=function(y,m){xi(y,m),Ca(v)},p.prototype.enterBlur=function(y){U3(y),Ca(v)},p.prototype.leaveBlur=function(y){Rb(y),Ca(v)},p.prototype.enterSelect=function(y){F3(y),Ca(v)},p.prototype.leaveSelect=function(y){j3(y),Ca(v)},p.prototype.getModel=function(){return v.getModel()},p.prototype.getViewOfComponentModel=function(y){return v.getViewOfComponentModel(y)},p.prototype.getViewOfSeriesModel=function(y){return v.getViewOfSeriesModel(y)},p})(kP))(v)},IO=function(v){function d(p,y){for(var m=0;m=0)){QL.push(t);var i=cO.wrapStageHandler(t,n);i.__prio=e,i.__raw=t,r.push(i)}}function BO(r,e){pS[r]=e}function Lj(r,e,t){var a=oj("registerMap");a&&a(r,e,t)}var Ej=FU;ul(e2,dF);ul(dy,pF);ul(dy,gF);ul(e2,LF);ul(dy,EF);ul(DO,nj);zO(VP);kO(uj,wU);BO("default",yF);Vn({type:Xs,event:Xs,update:Xs},Ge);Vn({type:Rp,event:Rp,update:Rp},Ge);Vn({type:Zf,event:Zf,update:Zf},Ge);Vn({type:Ip,event:Ip,update:Ip},Ge);Vn({type:Wf,event:Wf,update:Wf},Ge);OO("light",CF);OO("dark",dO);var JL=[],Rj={registerPreprocessor:zO,registerProcessor:kO,registerPostInit:Aj,registerPostUpdate:Dj,registerUpdateLifecycle:n2,registerAction:Vn,registerCoordinateSystem:Cj,registerLayout:Mj,registerVisual:ul,registerTransform:Ej,registerLoading:BO,registerMap:Lj,registerImpl:ij,PRIORITY:mj,ComponentModel:jt,ComponentView:Ee,SeriesModel:Se,ChartView:de,registerComponentModel:function(r){jt.registerClass(r)},registerComponentView:function(r){Ee.registerClass(r)},registerSeriesModel:function(r){Se.registerClass(r)},registerChartView:function(r){de.registerClass(r)},registerSubTypeDefaulter:function(r,e){jt.registerSubTypeDefaulter(r,e)},registerPainter:function(r,e){g8(r,e)}};function Ht(r){if(it(r)){P(r,function(e){Ht(e)});return}Vt(JL,r)>=0||(JL.push(r),bt(r)&&(r={install:r}),r.install(Rj))}function df(r){return r==null?0:r.length||1}function tE(r){return r}var Si=(function(){function r(e,t,a,n,i,o){this._old=e,this._new=t,this._oldKeyGetter=a||tE,this._newKeyGetter=n||tE,this.context=i,this._diffModeMultiple=o==="multiple"}return r.prototype.add=function(e){return this._add=e,this},r.prototype.update=function(e){return this._update=e,this},r.prototype.updateManyToOne=function(e){return this._updateManyToOne=e,this},r.prototype.updateOneToMany=function(e){return this._updateOneToMany=e,this},r.prototype.updateManyToMany=function(e){return this._updateManyToMany=e,this},r.prototype.remove=function(e){return this._remove=e,this},r.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},r.prototype._executeOneToOne=function(){var e=this._old,t=this._new,a={},n=new Array(e.length),i=new Array(t.length);this._initIndexMap(e,null,n,"_oldKeyGetter"),this._initIndexMap(t,a,i,"_newKeyGetter");for(var o=0;o1){var f=l.shift();l.length===1&&(a[s]=l[0]),this._update&&this._update(f,o)}else u===1?(a[s]=null,this._update&&this._update(l,o)):this._remove&&this._remove(o)}this._performRestAdd(i,a)},r.prototype._executeMultiple=function(){var e=this._old,t=this._new,a={},n={},i=[],o=[];this._initIndexMap(e,a,i,"_oldKeyGetter"),this._initIndexMap(t,n,o,"_newKeyGetter");for(var s=0;s1&&d===1)this._updateManyToOne&&this._updateManyToOne(f,u),n[l]=null;else if(v===1&&d>1)this._updateOneToMany&&this._updateOneToMany(f,u),n[l]=null;else if(v===1&&d===1)this._update&&this._update(f,u),n[l]=null;else if(v>1&&d>1)this._updateManyToMany&&this._updateManyToMany(f,u),n[l]=null;else if(v>1)for(var p=0;p1)for(var s=0;s30}var pf=Tt,no=st,kj=typeof Int32Array>"u"?Array:Int32Array,Bj="e\0\0",eE=-1,Vj=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],Gj=["_approximateExtent"],rE,Xd,gf,yf,K1,Zd,Q1,Pr=(function(){function r(e,t){this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","lttbDownSample"];var a,n=!1;GO(e)?(a=e.dimensions,this._dimOmitted=e.isDimensionOmitted(),this._schema=e):(n=!0,a=e),a=a||["x","y"];for(var i={},o=[],s={},l=!1,u={},f=0;f=t)){var a=this._store,n=a.getProvider();this._updateOrdinalMeta();var i=this._nameList,o=this._idList,s=n.getSource().sourceFormat,l=s===Ya;if(l&&!n.pure)for(var u=[],f=e;f0},r.prototype.ensureUniqueItemVisual=function(e,t){var a=this._itemVisuals,n=a[e];n||(n=a[e]={});var i=n[t];return i==null&&(i=this.getVisual(t),it(i)?i=i.slice():pf(i)&&(i=et({},i)),n[t]=i),i},r.prototype.setItemVisual=function(e,t,a){var n=this._itemVisuals[e]||{};this._itemVisuals[e]=n,pf(t)?et(n,t):n[t]=a},r.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},r.prototype.setLayout=function(e,t){pf(e)?et(this._layout,e):this._layout[e]=t},r.prototype.getLayout=function(e){return this._layout[e]},r.prototype.getItemLayout=function(e){return this._itemLayouts[e]},r.prototype.setItemLayout=function(e,t,a){this._itemLayouts[e]=a?et(this._itemLayouts[e]||{},t):t},r.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},r.prototype.setItemGraphicEl=function(e,t){var a=this.hostModel&&this.hostModel.seriesIndex;Zx(a,this.dataType,e,t),this._graphicEls[e]=t},r.prototype.getItemGraphicEl=function(e){return this._graphicEls[e]},r.prototype.eachItemGraphicEl=function(e,t){P(this._graphicEls,function(a,n){a&&e&&e.call(t,a,n)})},r.prototype.cloneShallow=function(e){return e||(e=new r(this._schema?this._schema:no(this.dimensions,this._getDimInfo,this),this.hostModel)),K1(e,this),e._store=this._store,e},r.prototype.wrapMethod=function(e,t){var a=this[e];bt(a)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(e),this[e]=function(){var n=a.apply(this,arguments);return t.apply(this,[n].concat(pb(arguments)))})},r.internalField=(function(){rE=function(e){var t=e._invertedIndicesMap;P(t,function(a,n){var i=e._dimInfos[n],o=i.ordinalMeta,s=e._store;if(o){a=t[n]=new kj(o.categories.length);for(var l=0;l1&&(l+="__ec__"+f),n[t]=l}}})(),r})();function jh(r,e){Zb(r)||(r=Wb(r)),e=e||{};var t=e.coordDimensions||[],a=e.dimensionsDefine||r.dimensionsDefine||[],n=xt(),i=[],o=Uj(r,t,a,e.dimensionsCount),s=e.canOmitUnusedDimensions&&FO(o),l=a===r.dimensionsDefine,u=l?UO(r):HO(a),f=e.encodeDefine;!f&&e.encodeDefaulter&&(f=e.encodeDefaulter(r,o));for(var v=xt(f),d=new $P(o),p=0;p0&&(a.name=n+(i-1)),i++,e.set(n,i)}}function Uj(r,e,t,a){var n=Math.max(r.dimensionsDetectedCount||1,e.length,t.length,a||0);return P(e,function(i){var o;Tt(i)&&(o=i.dimsDef)&&(n=Math.max(n,o.length))}),n}function Fj(r,e,t){if(t||e.hasKey(r)){for(var a=0;e.hasKey(r+a);)a++;r+=a}return e.set(r,!0),r}var jj=(function(){function r(e){this.coordSysDims=[],this.axisMap=xt(),this.categoryAxisMap=xt(),this.coordSysName=e}return r})();function Yj(r){var e=r.get("coordinateSystem"),t=new jj(e),a=Xj[e];if(a)return a(r,t,t.axisMap,t.categoryAxisMap),t}var Xj={cartesian2d:function(r,e,t,a){var n=r.getReferringComponents("xAxis",je).models[0],i=r.getReferringComponents("yAxis",je).models[0];e.coordSysDims=["x","y"],t.set("x",n),t.set("y",i),lu(n)&&(a.set("x",n),e.firstCategoryDimIndex=0),lu(i)&&(a.set("y",i),e.firstCategoryDimIndex==null&&(e.firstCategoryDimIndex=1))},singleAxis:function(r,e,t,a){var n=r.getReferringComponents("singleAxis",je).models[0];e.coordSysDims=["single"],t.set("single",n),lu(n)&&(a.set("single",n),e.firstCategoryDimIndex=0)},polar:function(r,e,t,a){var n=r.getReferringComponents("polar",je).models[0],i=n.findAxisModel("radiusAxis"),o=n.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],t.set("radius",i),t.set("angle",o),lu(i)&&(a.set("radius",i),e.firstCategoryDimIndex=0),lu(o)&&(a.set("angle",o),e.firstCategoryDimIndex==null&&(e.firstCategoryDimIndex=1))},geo:function(r,e,t,a){e.coordSysDims=["lng","lat"]},parallel:function(r,e,t,a){var n=r.ecModel,i=n.getComponent("parallel",r.get("parallelIndex")),o=e.coordSysDims=i.dimensions.slice();P(i.parallelAxisIndex,function(s,l){var u=n.getComponent("parallelAxis",s),f=o[l];t.set(f,u),lu(u)&&(a.set(f,u),e.firstCategoryDimIndex==null&&(e.firstCategoryDimIndex=l))})}};function lu(r){return r.get("type")==="category"}function Zj(r,e,t){t=t||{};var a=t.byIndex,n=t.stackedCoordDimension,i,o,s;Wj(e)?i=e:(o=e.schema,i=o.dimensions,s=e.store);var l=!!(r&&r.get("stack")),u,f,v,d;if(P(i,function(b,w){vt(b)&&(i[w]=b={name:b}),l&&!b.isExtraCoord&&(!a&&!u&&b.ordinalMeta&&(u=b),!f&&b.type!=="ordinal"&&b.type!=="time"&&(!n||n===b.coordDim)&&(f=b))}),f&&!a&&!u&&(a=!0),f){v="__\0ecstackresult_"+r.id,d="__\0ecstackedover_"+r.id,u&&(u.createInvertedIndices=!0);var p=f.coordDim,y=f.type,m=0;P(i,function(b){b.coordDim===p&&m++});var _={name:v,coordDim:p,coordDimIndex:m,type:y,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length},S={name:d,coordDim:d,coordDimIndex:m+1,type:y,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length+1};o?(s&&(_.storeDimIndex=s.ensureCalculationDimension(d,y),S.storeDimIndex=s.ensureCalculationDimension(v,y)),o.appendCalculationDimension(_),o.appendCalculationDimension(S)):(i.push(_),i.push(S))}return{stackedDimension:f&&f.name,stackedByDimension:u&&u.name,isStackedByIndex:a,stackedOverDimension:d,stackResultDimension:v}}function Wj(r){return!GO(r.schema)}function Io(r,e){return!!e&&e===r.getCalculationInfo("stackedDimension")}function jO(r,e){return Io(r,e)?r.getCalculationInfo("stackResultDimension"):e}function qj(r,e){var t=r.get("coordinateSystem"),a=Uh.get(t),n;return e&&e.coordSysDims&&(n=st(e.coordSysDims,function(i){var o={name:i},s=e.axisMap.get(i);if(s){var l=s.get("type");o.type=yg(l)}return o})),n||(n=a&&(a.getDimensionsInfo?a.getDimensionsInfo():a.dimensions.slice())||["x","y"]),n}function $j(r,e,t){var a,n;return t&&P(r,function(i,o){var s=i.coordDim,l=t.categoryAxisMap.get(s);l&&(a==null&&(a=o),i.ordinalMeta=l.getOrdinalMeta(),e&&(i.createInvertedIndices=!0)),i.otherDims.itemName!=null&&(n=!0)}),!n&&a!=null&&(r[a].otherDims.itemName=0),a}function Di(r,e,t){t=t||{};var a=e.getSourceManager(),n,i=!1;r?(i=!0,n=Wb(r)):(n=a.getSource(),i=n.sourceFormat===Ya);var o=Yj(e),s=qj(e,o),l=t.useEncodeDefaulter,u=bt(l)?l:l?It(NP,s,e):null,f={coordDimensions:s,generateCoord:t.generateCoord,encodeDefine:e.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!i},v=jh(n,f),d=$j(v.dimensions,t.createInvertedIndices,o),p=i?null:a.getSharedDataStore(v),y=Zj(e,{schema:v,store:p}),m=new Pr(v,e);m.setCalculationInfo(y);var _=d!=null&&Kj(n)?function(S,b,w,A){return A===d?w:this.defaultDimValueGetter(S,b,w,A)}:null;return m.hasItemOption=!1,m.initData(i?n:p,null,_),m}function Kj(r){if(r.sourceFormat===Ya){var e=Qj(r.data||[]);return!it(Yu(e))}}function Qj(r){for(var e=0;et[1]&&(t[1]=e[1])},r.prototype.unionExtentFromData=function(e,t){this.unionExtent(e.getApproximateExtent(t))},r.prototype.getExtent=function(){return this._extent.slice()},r.prototype.setExtent=function(e,t){var a=this._extent;isNaN(e)||(a[0]=e),isNaN(t)||(a[1]=t)},r.prototype.isInExtentRange=function(e){return this._extent[0]<=e&&this._extent[1]>=e},r.prototype.isBlank=function(){return this._isBlank},r.prototype.setBlank=function(e){this._isBlank=e},r})();qg(Gn);var Jj=0,gS=(function(){function r(e){this.categories=e.categories||[],this._needCollect=e.needCollect,this._deduplication=e.deduplication,this.uid=++Jj}return r.createByAxisModel=function(e){var t=e.option,a=t.data,n=a&&st(a,tY);return new r({categories:n,needCollect:!n,deduplication:t.dedplication!==!1})},r.prototype.getOrdinal=function(e){return this._getOrCreateMap().get(e)},r.prototype.parseAndCollect=function(e){var t,a=this._needCollect;if(!vt(e)&&!a)return e;if(a&&!this._deduplication)return t=this.categories.length,this.categories[t]=e,t;var n=this._getOrCreateMap();return t=n.get(e),t==null&&(a?(t=this.categories.length,this.categories[t]=e,n.set(e,t)):t=NaN),t},r.prototype._getOrCreateMap=function(){return this._map||(this._map=xt(this.categories))},r})();function tY(r){return Tt(r)&&r.value!=null?r.value:r+""}function yS(r){return r.type==="interval"||r.type==="log"}function eY(r,e,t,a){var n={},i=r[1]-r[0],o=n.interval=g3(i/e);t!=null&&oa&&(o=n.interval=a);var s=n.intervalPrecision=YO(o),l=n.niceTickExtent=[Oe(Math.ceil(r[0]/o)*o,s),Oe(Math.floor(r[1]/o)*o,s)];return rY(l,r),n}function J1(r){var e=Math.pow(10,wb(r)),t=r/e;return t?t===2?t=3:t===3?t=5:t*=2:t=1,Oe(t*e)}function YO(r){return Cn(r)+2}function aE(r,e,t){r[e]=Math.max(Math.min(r[e],t[1]),t[0])}function rY(r,e){!isFinite(r[0])&&(r[0]=e[0]),!isFinite(r[1])&&(r[1]=e[1]),aE(r,0,e),aE(r,1,e),r[0]>r[1]&&(r[0]=r[1])}function py(r,e){return r>=e[0]&&r<=e[1]}function gy(r,e){return e[1]===e[0]?.5:(r-e[0])/(e[1]-e[0])}function yy(r,e){return r*(e[1]-e[0])+e[0]}var my=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;a.type="ordinal";var n=a.getSetting("ordinalMeta");return n||(n=new gS({})),it(n)&&(n=new gS({categories:st(n,function(i){return Tt(i)?i.value:i})})),a._ordinalMeta=n,a._extent=a.getSetting("extent")||[0,n.categories.length-1],a}return e.prototype.parse=function(t){return t==null?NaN:vt(t)?this._ordinalMeta.getOrdinal(t):Math.round(t)},e.prototype.contain=function(t){return t=this.parse(t),py(t,this._extent)&&this._ordinalMeta.categories[t]!=null},e.prototype.normalize=function(t){return t=this._getTickNumber(this.parse(t)),gy(t,this._extent)},e.prototype.scale=function(t){return t=Math.round(yy(t,this._extent)),this.getRawOrdinalNumber(t)},e.prototype.getTicks=function(){for(var t=[],a=this._extent,n=a[0];n<=a[1];)t.push({value:n}),n++;return t},e.prototype.getMinorTicks=function(t){},e.prototype.setSortInfo=function(t){if(t==null){this._ordinalNumbersByTick=this._ticksByOrdinalNumber=null;return}for(var a=t.ordinalNumbers,n=this._ordinalNumbersByTick=[],i=this._ticksByOrdinalNumber=[],o=0,s=this._ordinalMeta.categories.length,l=Math.min(s,a.length);o=0&&t=0&&t=t},e.prototype.getOrdinalMeta=function(){return this._ordinalMeta},e.prototype.calcNiceTicks=function(){},e.prototype.calcNiceExtent=function(){},e.type="ordinal",e})(Gn);Gn.registerClass(my);var xs=Oe,bi=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="interval",t._interval=0,t._intervalPrecision=2,t}return e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return py(t,this._extent)},e.prototype.normalize=function(t){return gy(t,this._extent)},e.prototype.scale=function(t){return yy(t,this._extent)},e.prototype.setExtent=function(t,a){var n=this._extent;isNaN(t)||(n[0]=parseFloat(t)),isNaN(a)||(n[1]=parseFloat(a))},e.prototype.unionExtent=function(t){var a=this._extent;t[0]a[1]&&(a[1]=t[1]),this.setExtent(a[0],a[1])},e.prototype.getInterval=function(){return this._interval},e.prototype.setInterval=function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=YO(t)},e.prototype.getTicks=function(t){var a=this._interval,n=this._extent,i=this._niceExtent,o=this._intervalPrecision,s=[];if(!a)return s;var l=1e4;n[0]l)return[];var f=s.length?s[s.length-1].value:i[1];return n[1]>f&&(t?s.push({value:xs(f+a,o)}):s.push({value:n[1]})),s},e.prototype.getMinorTicks=function(t){for(var a=this.getTicks(!0),n=[],i=this.getExtent(),o=1;oi[0]&&p0&&(i=i===null?s:Math.min(i,s))}t[a]=i}}return t}function qO(r){var e=iY(r),t=[];return P(r,function(a){var n=a.coordinateSystem,i=n.getBaseAxis(),o=i.getExtent(),s;if(i.type==="category")s=i.getBandWidth();else if(i.type==="value"||i.type==="time"){var l=i.dim+"_"+i.index,u=e[l],f=Math.abs(o[1]-o[0]),v=i.scale.getExtent(),d=Math.abs(v[1]-v[0]);s=u?f/d*u:f}else{var p=a.getData();s=Math.abs(o[1]-o[0])/p.count()}var y=ft(a.get("barWidth"),s),m=ft(a.get("barMaxWidth"),s),_=ft(a.get("barMinWidth")||(t4(a)?.5:1),s),S=a.get("barGap"),b=a.get("barCategoryGap");t.push({bandWidth:s,barWidth:y,barMaxWidth:m,barMinWidth:_,barGap:S,barCategoryGap:b,axisKey:o2(i),stackId:ZO(a)})}),$O(t)}function $O(r){var e={};P(r,function(a,n){var i=a.axisKey,o=a.bandWidth,s=e[i]||{bandWidth:o,remainedWidth:o,autoWidthCount:0,categoryGap:null,gap:"20%",stacks:{}},l=s.stacks;e[i]=s;var u=a.stackId;l[u]||s.autoWidthCount++,l[u]=l[u]||{width:0,maxWidth:0};var f=a.barWidth;f&&!l[u].width&&(l[u].width=f,f=Math.min(s.remainedWidth,f),s.remainedWidth-=f);var v=a.barMaxWidth;v&&(l[u].maxWidth=v);var d=a.barMinWidth;d&&(l[u].minWidth=d);var p=a.barGap;p!=null&&(s.gap=p);var y=a.barCategoryGap;y!=null&&(s.categoryGap=y)});var t={};return P(e,function(a,n){t[n]={};var i=a.stacks,o=a.bandWidth,s=a.categoryGap;if(s==null){var l=Yt(i).length;s=Math.max(35-l*4,15)+"%"}var u=ft(s,o),f=ft(a.gap,1),v=a.remainedWidth,d=a.autoWidthCount,p=(v-u)/(d+(d-1)*f);p=Math.max(p,0),P(i,function(S){var b=S.maxWidth,w=S.minWidth;if(S.width){var A=S.width;b&&(A=Math.min(A,b)),w&&(A=Math.max(A,w)),S.width=A,v-=A+f*A,d--}else{var A=p;b&&bA&&(A=w),A!==p&&(S.width=A,v-=A+f*A,d--)}}),p=(v-u)/(d+(d-1)*f),p=Math.max(p,0);var y=0,m;P(i,function(S,b){S.width||(S.width=p),m=S,y+=S.width*(1+f)}),m&&(y-=m.width*f);var _=-y/2;P(i,function(S,b){t[n][b]=t[n][b]||{bandWidth:o,offset:_,width:S.width},_+=S.width*(1+f)})}),t}function oY(r,e,t){if(r&&e){var a=r[o2(e)];return a}}function KO(r,e){var t=WO(r,e),a=qO(t);P(t,function(n){var i=n.getData(),o=n.coordinateSystem,s=o.getBaseAxis(),l=ZO(n),u=a[o2(s)][l],f=u.offset,v=u.width;i.setLayout({bandWidth:u.bandWidth,offset:f,size:v})})}function QO(r){return{seriesType:r,plan:tc(),reset:function(e){if(JO(e)){var t=e.getData(),a=e.coordinateSystem,n=a.getBaseAxis(),i=a.getOtherAxis(n),o=t.getDimensionIndex(t.mapDimension(i.dim)),s=t.getDimensionIndex(t.mapDimension(n.dim)),l=e.get("showBackground",!0),u=t.mapDimension(i.dim),f=t.getCalculationInfo("stackResultDimension"),v=Io(t,u)&&!!t.getCalculationInfo("stackedOnSeries"),d=i.isHorizontal(),p=sY(n,i),y=t4(e),m=e.get("barMinHeight")||0,_=f&&t.getDimensionIndex(f),S=t.getLayout("size"),b=t.getLayout("offset");return{progress:function(w,A){for(var M=w.count,C=y&&Ln(M*3),L=y&&l&&Ln(M*3),E=y&&Ln(M),R=a.master.getRect(),N=d?R.width:R.height,O,k=A.getStore(),G=0;(O=w.next())!=null;){var H=k.get(v?_:o,O),F=k.get(s,O),B=p,j=void 0;v&&(j=+H-k.get(o,O));var Y=void 0,K=void 0,nt=void 0,U=void 0;if(d){var W=a.dataToPoint([H,F]);if(v){var rt=a.dataToPoint([j,F]);B=rt[0]}Y=B,K=W[1]+b,nt=W[0]-B,U=S,Math.abs(nt)>>1;r[n][1]n&&(this._approxInterval=n);var s=Wd.length,l=Math.min(lY(Wd,this._approxInterval,0,s),s-1);this._interval=Wd[l][1],this._minLevelUnit=Wd[Math.max(l-1,0)][0]},e.prototype.parse=function(t){return Qt(t)?t:+zn(t)},e.prototype.contain=function(t){return py(this.parse(t),this._extent)},e.prototype.normalize=function(t){return gy(this.parse(t),this._extent)},e.prototype.scale=function(t){return yy(t,this._extent)},e.type="time",e})(bi),Wd=[["second",Vb],["minute",Gb],["hour",$f],["quarter-day",$f*6],["half-day",$f*12],["day",Va*1.2],["half-week",Va*3.5],["week",Va*7],["month",Va*31],["quarter",Va*95],["half-year",XM/2],["year",XM]];function uY(r,e,t,a){var n=zn(e),i=zn(t),o=function(y){return WM(n,y,a)===WM(i,y,a)},s=function(){return o("year")},l=function(){return s()&&o("month")},u=function(){return l()&&o("day")},f=function(){return u()&&o("hour")},v=function(){return f()&&o("minute")},d=function(){return v()&&o("second")},p=function(){return d()&&o("millisecond")};switch(r){case"year":return s();case"month":return l();case"day":return u();case"hour":return f();case"minute":return v();case"second":return d();case"millisecond":return p()}}function cY(r,e){return r/=Va,r>16?16:r>7.5?7:r>3.5?4:r>1.5?2:1}function fY(r){var e=30*Va;return r/=e,r>6?6:r>3?3:r>2?2:1}function hY(r){return r/=$f,r>12?12:r>6?6:r>3.5?4:r>2?2:1}function nE(r,e){return r/=e?Gb:Vb,r>30?30:r>20?20:r>15?15:r>10?10:r>5?5:r>2?2:1}function vY(r){return g3(r)}function dY(r,e,t){var a=new Date(r);switch(Lu(e)){case"year":case"month":a[mP(t)](0);case"day":a[_P(t)](1);case"hour":a[xP(t)](0);case"minute":a[SP(t)](0);case"second":a[bP(t)](0),a[wP(t)](0)}return a.getTime()}function pY(r,e,t,a){var n=1e4,i=gP,o=0;function s(N,O,k,G,H,F,B){for(var j=new Date(O),Y=O,K=j[G]();Y1&&F===0&&k.unshift({value:k[0].value-Y})}}for(var F=0;F=a[0]&&b<=a[1]&&v++)}var w=(a[1]-a[0])/e;if(v>w*1.5&&d>w/1.5||(u.push(_),v>w||r===i[p]))break}f=[]}}}for(var A=le(st(u,function(N){return le(N,function(O){return O.value>=a[0]&&O.value<=a[1]&&!O.notAdd})}),function(N){return N.length>0}),M=[],C=A.length-1,p=0;p0;)i*=10;var s=[Oe(mY(a[0]/i)*i),Oe(yY(a[1]/i)*i)];this._interval=i,this._niceExtent=s}},e.prototype.calcNiceExtent=function(t){th.calcNiceExtent.call(this,t),this._fixMin=t.fixMin,this._fixMax=t.fixMax},e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return t=Ka(t)/Ka(this.base),py(t,this._extent)},e.prototype.normalize=function(t){return t=Ka(t)/Ka(this.base),gy(t,this._extent)},e.prototype.scale=function(t){return t=yy(t,this._extent),qd(this.base,t)},e.type="log",e})(Gn),e4=l2.prototype;e4.getMinorTicks=th.getMinorTicks;e4.getLabel=th.getLabel;function $d(r,e){return gY(r,Cn(e))}Gn.registerClass(l2);var _Y=(function(){function r(e,t,a){this._prepareParams(e,t,a)}return r.prototype._prepareParams=function(e,t,a){a[1]0&&l>0&&!u&&(s=0),s<0&&l<0&&!f&&(l=0));var d=this._determinedMin,p=this._determinedMax;return d!=null&&(s=d,u=!0),p!=null&&(l=p,f=!0),{min:s,max:l,minFixed:u,maxFixed:f,isBlank:v}},r.prototype.modifyDataMinMax=function(e,t){this[SY[e]]=t},r.prototype.setDeterminedMinMax=function(e,t){var a=xY[e];this[a]=t},r.prototype.freeze=function(){this.frozen=!0},r})(),xY={min:"_determinedMin",max:"_determinedMax"},SY={min:"_dataMin",max:"_dataMax"};function r4(r,e,t){var a=r.rawExtentInfo;return a||(a=new _Y(r,e,t),r.rawExtentInfo=a,a)}function Kd(r,e){return e==null?null:nh(e)?NaN:r.parse(e)}function a4(r,e){var t=r.type,a=r4(r,e,r.getExtent()).calculate();r.setBlank(a.isBlank);var n=a.min,i=a.max,o=e.ecModel;if(o&&t==="time"){var s=WO("bar",o),l=!1;if(P(s,function(v){l=l||v.getBaseAxis()===e.axis}),l){var u=qO(s),f=bY(n,i,e,u);n=f.min,i=f.max}}return{extent:[n,i],fixMin:a.minFixed,fixMax:a.maxFixed}}function bY(r,e,t,a){var n=t.axis.getExtent(),i=n[1]-n[0],o=oY(a,t.axis);if(o===void 0)return{min:r,max:e};var s=1/0;P(o,function(p){s=Math.min(p.offset,s)});var l=-1/0;P(o,function(p){l=Math.max(p.offset+p.width,l)}),s=Math.abs(s),l=Math.abs(l);var u=s+l,f=e-r,v=1-(s+l)/i,d=f/v-f;return e+=d*(l/u),r-=d*(s/u),{min:r,max:e}}function zu(r,e){var t=e,a=a4(r,t),n=a.extent,i=t.get("splitNumber");r instanceof l2&&(r.base=t.get("logBase"));var o=r.type,s=t.get("interval"),l=o==="interval"||o==="time";r.setExtent(n[0],n[1]),r.calcNiceExtent({splitNumber:i,fixMin:a.fixMin,fixMax:a.fixMax,minInterval:l?t.get("minInterval"):null,maxInterval:l?t.get("maxInterval"):null}),s!=null&&r.setInterval&&r.setInterval(s)}function _y(r,e){if(e=e||r.get("type"),e)switch(e){case"category":return new my({ordinalMeta:r.getOrdinalMeta?r.getOrdinalMeta():r.getCategories(),extent:[1/0,-1/0]});case"time":return new s2({locale:r.ecModel.getLocaleModel(),useUTC:r.ecModel.get("useUTC")});default:return new(Gn.getClass(e)||bi)}}function wY(r){var e=r.scale.getExtent(),t=e[0],a=e[1];return!(t>0&&a>0||t<0&&a<0)}function Yh(r){var e=r.getLabelModel().get("formatter"),t=r.type==="category"?r.scale.getExtent()[0]:null;return r.scale.type==="time"?(function(a){return function(n,i){return r.scale.getFormattedLabel(n,i,a)}})(e):vt(e)?(function(a){return function(n){var i=r.scale.getLabel(n),o=a.replace("{value}",i??"");return o}})(e):bt(e)?(function(a){return function(n,i){return t!=null&&(i=n.value-t),a(u2(r,n),i,n.level!=null?{level:n.level}:null)}})(e):function(a){return r.scale.getLabel(a)}}function u2(r,e){return r.type==="category"?r.scale.getLabel(e):e.value}function TY(r){var e=r.model,t=r.scale;if(!(!e.get(["axisLabel","show"])||t.isBlank())){var a,n,i=t.getExtent();t instanceof my?n=t.count():(a=t.getTicks(),n=a.length);var o=r.getLabelModel(),s=Yh(r),l,u=1;n>40&&(u=Math.ceil(n/40));for(var f=0;fr[1]&&(r[1]=n[1])})}var Xh=(function(){function r(){}return r.prototype.getNeedCrossZero=function(){var e=this.option;return!e.scale},r.prototype.getCoordSysModel=function(){},r})(),CY=1e-8;function oE(r,e){return Math.abs(r-e)n&&(a=o,n=l)}if(a)return LY(a.exterior);var u=this.getBoundingRect();return[u.x+u.width/2,u.y+u.height/2]},e.prototype.getBoundingRect=function(t){var a=this._rect;if(a&&!t)return a;var n=[1/0,1/0],i=[-1/0,-1/0],o=this.geometries;return P(o,function(s){s.type==="polygon"?sE(s.exterior,n,i,t):P(s.points,function(l){sE(l,n,i,t)})}),isFinite(n[0])&&isFinite(n[1])&&isFinite(i[0])&&isFinite(i[1])||(n[0]=n[1]=i[0]=i[1]=0),a=new kt(n[0],n[1],i[0]-n[0],i[1]-n[1]),t||(this._rect=a),a},e.prototype.contain=function(t){var a=this.getBoundingRect(),n=this.geometries;if(!a.contain(t[0],t[1]))return!1;t:for(var i=0,o=n.length;i>1^-(s&1),l=l>>1^-(l&1),s+=n,l+=i,n=s,i=l,a.push([s/t,l/t])}return a}function IY(r,e){return r=RY(r),st(le(r.features,function(t){return t.geometry&&t.properties&&t.geometry.coordinates.length>0}),function(t){var a=t.properties,n=t.geometry,i=[];switch(n.type){case"Polygon":var o=n.coordinates;i.push(new lE(o[0],o.slice(1)));break;case"MultiPolygon":P(n.coordinates,function(l){l[0]&&i.push(new lE(l[0],l.slice(1)))});break;case"LineString":i.push(new uE([n.coordinates]));break;case"MultiLineString":i.push(new uE(n.coordinates))}var s=new o4(a[e||"name"],i,a.cp);return s.properties=a,s})}var _h=Kt();function NY(r){return r.type==="category"?OY(r):kY(r)}function PY(r,e){return r.type==="category"?zY(r,e):{ticks:st(r.scale.getTicks(),function(t){return t.value})}}function OY(r){var e=r.getLabelModel(),t=l4(r,e);return!e.get("show")||r.scale.isBlank()?{labels:[],labelCategoryInterval:t.labelCategoryInterval}:t}function l4(r,e){var t=u4(r,"labels"),a=c2(e),n=c4(t,a);if(n)return n;var i,o;return bt(a)?i=v4(r,a):(o=a==="auto"?BY(r):a,i=h4(r,o)),f4(t,a,{labels:i,labelCategoryInterval:o})}function zY(r,e){var t=u4(r,"ticks"),a=c2(e),n=c4(t,a);if(n)return n;var i,o;if((!e.get("show")||r.scale.isBlank())&&(i=[]),bt(a))i=v4(r,a,!0);else if(a==="auto"){var s=l4(r,r.getLabelModel());o=s.labelCategoryInterval,i=st(s.labels,function(l){return l.tickValue})}else o=a,i=h4(r,o,!0);return f4(t,a,{ticks:i,tickCategoryInterval:o})}function kY(r){var e=r.scale.getTicks(),t=Yh(r);return{labels:st(e,function(a,n){return{level:a.level,formattedLabel:t(a,n),rawLabel:r.scale.getLabel(a),tickValue:a.value}})}}function u4(r,e){return _h(r)[e]||(_h(r)[e]=[])}function c4(r,e){for(var t=0;t40&&(s=Math.max(1,Math.floor(o/40)));for(var l=i[0],u=r.dataToCoord(l+1)-r.dataToCoord(l),f=Math.abs(u*Math.cos(a)),v=Math.abs(u*Math.sin(a)),d=0,p=0;l<=i[1];l+=s){var y=0,m=0,_=Nh(t({value:l}),e.font,"center","top");y=_.width*1.3,m=_.height*1.3,d=Math.max(d,y,7),p=Math.max(p,m,7)}var S=d/f,b=p/v;isNaN(S)&&(S=1/0),isNaN(b)&&(b=1/0);var w=Math.max(0,Math.floor(Math.min(S,b))),A=_h(r.model),M=r.getExtent(),C=A.lastAutoInterval,L=A.lastTickCount;return C!=null&&L!=null&&Math.abs(C-w)<=1&&Math.abs(L-o)<=1&&C>w&&A.axisExtent0===M[0]&&A.axisExtent1===M[1]?w=C:(A.lastTickCount=o,A.lastAutoInterval=w,A.axisExtent0=M[0],A.axisExtent1=M[1]),w}function GY(r){var e=r.getLabelModel();return{axisRotate:r.getRotate?r.getRotate():r.isHorizontal&&!r.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}function h4(r,e,t){var a=Yh(r),n=r.scale,i=n.getExtent(),o=r.getLabelModel(),s=[],l=Math.max((e||0)+1,1),u=i[0],f=n.count();u!==0&&l>1&&f/l>2&&(u=Math.round(Math.ceil(u/l)*l));var v=n4(r),d=o.get("showMinLabel")||v,p=o.get("showMaxLabel")||v;d&&u!==i[0]&&m(i[0]);for(var y=u;y<=i[1];y+=l)m(y);p&&y-l!==i[1]&&m(i[1]);function m(_){var S={value:_};s.push(t?_:{formattedLabel:a(S),rawLabel:n.getLabel(S),tickValue:_})}return s}function v4(r,e,t){var a=r.scale,n=Yh(r),i=[];return P(a.getTicks(),function(o){var s=a.getLabel(o),l=o.value;e(o.value,s)&&i.push(t?l:{formattedLabel:n(o),rawLabel:s,tickValue:l})}),i}var cE=[0,1],hn=(function(){function r(e,t,a){this.onBand=!1,this.inverse=!1,this.dim=e,this.scale=t,this._extent=a||[0,0]}return r.prototype.contain=function(e){var t=this._extent,a=Math.min(t[0],t[1]),n=Math.max(t[0],t[1]);return e>=a&&e<=n},r.prototype.containData=function(e){return this.scale.contain(e)},r.prototype.getExtent=function(){return this._extent.slice()},r.prototype.getPixelPrecision=function(e){return d3(e||this.scale.getExtent(),this._extent)},r.prototype.setExtent=function(e,t){var a=this._extent;a[0]=e,a[1]=t},r.prototype.dataToCoord=function(e,t){var a=this._extent,n=this.scale;return e=n.normalize(e),this.onBand&&n.type==="ordinal"&&(a=a.slice(),fE(a,n.count())),se(e,cE,a,t)},r.prototype.coordToData=function(e,t){var a=this._extent,n=this.scale;this.onBand&&n.type==="ordinal"&&(a=a.slice(),fE(a,n.count()));var i=se(e,a,cE,t);return this.scale.scale(i)},r.prototype.pointToData=function(e,t){},r.prototype.getTicksCoords=function(e){e=e||{};var t=e.tickModel||this.getTickModel(),a=PY(this,t),n=a.ticks,i=st(n,function(s){return{coord:this.dataToCoord(this.scale.type==="ordinal"?this.scale.getRawOrdinalNumber(s):s),tickValue:s}},this),o=t.get("alignWithLabel");return HY(this,i,o,e.clamp),i},r.prototype.getMinorTicksCoords=function(){if(this.scale.type==="ordinal")return[];var e=this.model.getModel("minorTick"),t=e.get("splitNumber");t>0&&t<100||(t=5);var a=this.scale.getMinorTicks(t),n=st(a,function(i){return st(i,function(o){return{coord:this.dataToCoord(o),tickValue:o}},this)},this);return n},r.prototype.getViewLabels=function(){return NY(this).labels},r.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},r.prototype.getTickModel=function(){return this.model.getModel("axisTick")},r.prototype.getBandWidth=function(){var e=this._extent,t=this.scale.getExtent(),a=t[1]-t[0]+(this.onBand?1:0);a===0&&(a=1);var n=Math.abs(e[1]-e[0]);return Math.abs(n)/a},r.prototype.calculateCategoryInterval=function(){return VY(this)},r})();function fE(r,e){var t=r[1]-r[0],a=e,n=t/a/2;r[0]+=n,r[1]-=n}function HY(r,e,t,a){var n=e.length;if(!r.onBand||t||!n)return;var i=r.getExtent(),o,s;if(n===1)e[0].coord=i[0],o=e[1]={coord:i[1]};else{var l=e[n-1].tickValue-e[0].tickValue,u=(e[n-1].coord-e[0].coord)/l;P(e,function(p){p.coord-=u/2});var f=r.scale.getExtent();s=1+f[1]-e[n-1].tickValue,o={coord:e[n-1].coord+u*s},e.push(o)}var v=i[0]>i[1];d(e[0].coord,i[0])&&(a?e[0].coord=i[0]:e.shift()),a&&d(i[0],e[0].coord)&&e.unshift({coord:i[0]}),d(i[1],o.coord)&&(a?o.coord=i[1]:e.pop()),a&&d(o.coord,i[1])&&e.push({coord:i[1]});function d(p,y){return p=Oe(p),y=Oe(y),v?p>y:pn&&(n+=mf);var p=Math.atan2(s,o);if(p<0&&(p+=mf),p>=a&&p<=n||p+mf>=a&&p+mf<=n)return l[0]=f,l[1]=v,u-t;var y=t*Math.cos(a)+r,m=t*Math.sin(a)+e,_=t*Math.cos(n)+r,S=t*Math.sin(n)+e,b=(y-o)*(y-o)+(m-s)*(m-s),w=(_-o)*(_-o)+(S-s)*(S-s);return b0){e=e/180*Math.PI,nn.fromArray(r[0]),_e.fromArray(r[1]),Ve.fromArray(r[2]),Pt.sub(En,nn,_e),Pt.sub(Dn,Ve,_e);var t=En.len(),a=Dn.len();if(!(t<.001||a<.001)){En.scale(1/t),Dn.scale(1/a);var n=En.dot(Dn),i=Math.cos(e);if(i1&&Pt.copy(Nr,Ve),Nr.toArray(r[1])}}}}function ZY(r,e,t){if(t<=180&&t>0){t=t/180*Math.PI,nn.fromArray(r[0]),_e.fromArray(r[1]),Ve.fromArray(r[2]),Pt.sub(En,_e,nn),Pt.sub(Dn,Ve,_e);var a=En.len(),n=Dn.len();if(!(a<.001||n<.001)){En.scale(1/a),Dn.scale(1/n);var i=En.dot(e),o=Math.cos(t);if(i=l)Pt.copy(Nr,Ve);else{Nr.scaleAndAdd(Dn,s/Math.tan(Math.PI/2-f));var v=Ve.x!==_e.x?(Nr.x-_e.x)/(Ve.x-_e.x):(Nr.y-_e.y)/(Ve.y-_e.y);if(isNaN(v))return;v<0?Pt.copy(Nr,_e):v>1&&Pt.copy(Nr,Ve)}Nr.toArray(r[1])}}}}function vE(r,e,t,a){var n=t==="normal",i=n?r:r.ensureState(t);i.ignore=e;var o=a.get("smooth");o&&o===!0&&(o=.3),i.shape=i.shape||{},o>0&&(i.shape.smooth=o);var s=a.getModel("lineStyle").getLineStyle();n?r.useStyle(s):i.style=s}function WY(r,e){var t=e.smooth,a=e.points;if(a)if(r.moveTo(a[0][0],a[0][1]),t>0&&a.length>=3){var n=ho(a[0],a[1]),i=ho(a[1],a[2]);if(!n||!i){r.lineTo(a[1][0],a[1][1]),r.lineTo(a[2][0],a[2][1]);return}var o=Math.min(n,i)*t,s=Ap([],a[1],a[0],o/n),l=Ap([],a[1],a[2],o/i),u=Ap([],s,l,.5);r.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),r.bezierCurveTo(l[0],l[1],l[0],l[1],a[2][0],a[2][1])}else for(var f=1;f0){w(R*E,0,o);var N=R+C;N<0&&A(-N*E,1)}else A(-C*E,1)}}function w(C,L,E){C!==0&&(u=!0);for(var R=L;R0)for(var N=0;N0;N--){var H=E[N-1]*G;w(-H,N,o)}}}function M(C){var L=C<0?-1:1;C=Math.abs(C);for(var E=Math.ceil(C/(o-1)),R=0;R0?w(E,0,R+1):w(-E,o-R-1,o),C-=E,C<=0)return}return u}function qY(r,e,t,a){return y4(r,"x","width",e,t)}function m4(r,e,t,a){return y4(r,"y","height",e,t)}function _4(r){var e=[];r.sort(function(m,_){return _.priority-m.priority});var t=new kt(0,0,0,0);function a(m){if(!m.ignore){var _=m.ensureState("emphasis");_.ignore==null&&(_.ignore=!1)}m.ignore=!0}for(var n=0;n=0&&a.attr(i.oldLayoutSelect),Vt(d,"emphasis")>=0&&a.attr(i.oldLayoutEmphasis)),Jt(a,u,t,l)}else if(a.attr(u),!qu(a).valueAnimation){var v=Ot(a.style.opacity,1);a.style.opacity=0,Le(a,{style:{opacity:v}},t,l)}if(i.oldLayout=u,a.states.select){var p=i.oldLayoutSelect={};Qd(p,u,Jd),Qd(p,a.states.select,Jd)}if(a.states.emphasis){var y=i.oldLayoutEmphasis={};Qd(y,u,Jd),Qd(y,a.states.emphasis,Jd)}fP(a,l,f,t,t)}if(n&&!n.ignore&&!n.invisible){var i=QY(n),o=i.oldLayout,m={points:n.shape.points};o?(n.attr({shape:o}),Jt(n,{shape:m},t)):(n.setShape(m),n.style.strokePercent=0,Le(n,{style:{strokePercent:1}},t)),i.oldLayout=m}},r})(),a_=Kt();function tX(r){r.registerUpdateLifecycle("series:beforeupdate",function(e,t,a){var n=a_(t).labelManager;n||(n=a_(t).labelManager=new JY),n.clearLabels()}),r.registerUpdateLifecycle("series:layoutlabels",function(e,t,a){var n=a_(t).labelManager;a.updatedSeries.forEach(function(i){n.addLabelsOfSeries(t.getViewOfSeriesModel(i))}),n.updateLayoutConfig(t),n.layout(t),n.processLabelsOverall()})}var n_=Math.sin,i_=Math.cos,x4=Math.PI,bs=Math.PI*2,eX=180/x4,S4=(function(){function r(){}return r.prototype.reset=function(e){this._start=!0,this._d=[],this._str="",this._p=Math.pow(10,e||4)},r.prototype.moveTo=function(e,t){this._add("M",e,t)},r.prototype.lineTo=function(e,t){this._add("L",e,t)},r.prototype.bezierCurveTo=function(e,t,a,n,i,o){this._add("C",e,t,a,n,i,o)},r.prototype.quadraticCurveTo=function(e,t,a,n){this._add("Q",e,t,a,n)},r.prototype.arc=function(e,t,a,n,i,o){this.ellipse(e,t,a,a,0,n,i,o)},r.prototype.ellipse=function(e,t,a,n,i,o,s,l){var u=s-o,f=!l,v=Math.abs(u),d=mo(v-bs)||(f?u>=bs:-u>=bs),p=u>0?u%bs:u%bs+bs,y=!1;d?y=!0:mo(v)?y=!1:y=p>=x4==!!f;var m=e+a*i_(o),_=t+n*n_(o);this._start&&this._add("M",m,_);var S=Math.round(i*eX);if(d){var b=1/this._p,w=(f?1:-1)*(bs-b);this._add("A",a,n,S,1,+f,e+a*i_(o+w),t+n*n_(o+w)),b>.01&&this._add("A",a,n,S,0,+f,m,_)}else{var A=e+a*i_(s),M=t+n*n_(s);this._add("A",a,n,S,+y,+f,A,M)}},r.prototype.rect=function(e,t,a,n){this._add("M",e,t),this._add("l",a,0),this._add("l",0,n),this._add("l",-a,0),this._add("Z")},r.prototype.closePath=function(){this._d.length>0&&this._add("Z")},r.prototype._add=function(e,t,a,n,i,o,s,l,u){for(var f=[],v=this._p,d=1;d"}function cX(r){return""}function d2(r,e){e=e||{};var t=e.newline?` +`:"";function a(n){var i=n.children,o=n.tag,s=n.attrs,l=n.text;return uX(o,s)+(o!=="style"?ca(l):l||"")+(i?""+t+st(i,function(u){return a(u)}).join(t)+t:"")+cX(o)}return a(r)}function fX(r,e,t){t=t||{};var a=t.newline?` +`:"",n=" {"+a,i=a+"}",o=st(Yt(r),function(l){return l+n+st(Yt(r[l]),function(u){return u+":"+r[l][u]+";"}).join(a)+i}).join(a),s=st(Yt(e),function(l){return"@keyframes "+l+n+st(Yt(e[l]),function(u){return u+n+st(Yt(e[l][u]),function(f){var v=e[l][u][f];return f==="d"&&(v='path("'+v+'")'),f+":"+v+";"}).join(a)+i}).join(a)+i}).join(a);return!o&&!s?"":[""].join(a)}function xS(r){return{zrId:r,shadowCache:{},patternCache:{},gradientCache:{},clipPathCache:{},defs:{},cssNodes:{},cssAnims:{},cssClassIdx:0,cssAnimIdx:0,shadowIdx:0,gradientIdx:0,patternIdx:0,clipPathIdx:0}}function pE(r,e,t,a){return rr("svg","root",{width:r,height:e,xmlns:b4,"xmlns:xlink":w4,version:"1.1",baseProfile:"full",viewBox:a?"0 0 "+r+" "+e:!1},t)}var gE={cubicIn:"0.32,0,0.67,0",cubicOut:"0.33,1,0.68,1",cubicInOut:"0.65,0,0.35,1",quadraticIn:"0.11,0,0.5,0",quadraticOut:"0.5,1,0.89,1",quadraticInOut:"0.45,0,0.55,1",quarticIn:"0.5,0,0.75,0",quarticOut:"0.25,1,0.5,1",quarticInOut:"0.76,0,0.24,1",quinticIn:"0.64,0,0.78,0",quinticOut:"0.22,1,0.36,1",quinticInOut:"0.83,0,0.17,1",sinusoidalIn:"0.12,0,0.39,0",sinusoidalOut:"0.61,1,0.88,1",sinusoidalInOut:"0.37,0,0.63,1",exponentialIn:"0.7,0,0.84,0",exponentialOut:"0.16,1,0.3,1",exponentialInOut:"0.87,0,0.13,1",circularIn:"0.55,0,1,0.45",circularOut:"0,0.55,0.45,1",circularInOut:"0.85,0,0.15,1"},As="transform-origin";function hX(r,e,t){var a=et({},r.shape);et(a,e),r.buildPath(t,a);var n=new S4;return n.reset(i3(r)),t.rebuildPath(n,1),n.generateStr(),n.getStr()}function vX(r,e){var t=e.originX,a=e.originY;(t||a)&&(r[As]=t+"px "+a+"px")}var dX={fill:"fill",opacity:"opacity",lineWidth:"stroke-width",lineDashOffset:"stroke-dashoffset"};function A4(r,e){var t=e.zrId+"-ani-"+e.cssAnimIdx++;return e.cssAnims[t]=r,t}function pX(r,e,t){var a=r.shape.paths,n={},i,o;if(P(a,function(l){var u=xS(t.zrId);u.animation=!0,xy(l,{},u,!0);var f=u.cssAnims,v=u.cssNodes,d=Yt(f),p=d.length;if(p){o=d[p-1];var y=f[o];for(var m in y){var _=y[m];n[m]=n[m]||{d:""},n[m].d+=_.d||""}for(var S in v){var b=v[S].animation;b.indexOf(o)>=0&&(i=b)}}}),!!i){e.d=!1;var s=A4(n,t);return i.replace(o,s)}}function yE(r){return vt(r)?gE[r]?"cubic-bezier("+gE[r]+")":xb(r)?r:"":""}function xy(r,e,t,a){var n=r.animators,i=n.length,o=[];if(r instanceof Pb){var s=pX(r,e,t);if(s)o.push(s);else if(!i)return}else if(!i)return;for(var l={},u=0;u0}).length){var mt=A4(L,t);return mt+" "+b[0]+" both"}}for(var _ in l){var s=m(l[_]);s&&o.push(s)}if(o.length){var S=t.zrId+"-cls-"+t.cssClassIdx++;t.cssNodes["."+S]={animation:o.join(",")},e.class=S}}var xh=Math.round;function D4(r){return r&&vt(r.src)}function C4(r){return r&&bt(r.toDataURL)}function p2(r,e,t,a){oX(function(n,i){var o=n==="fill"||n==="stroke";o&&n3(i)?L4(e,r,n,a):o&&Sb(i)?E4(t,r,n,a):r[n]=i},e,t,!1),bX(t,r,a)}function mE(r){return mo(r[0]-1)&&mo(r[1])&&mo(r[2])&&mo(r[3]-1)}function gX(r){return mo(r[4])&&mo(r[5])}function g2(r,e,t){if(e&&!(gX(e)&&mE(e))){var a=1e4;r.transform=mE(e)?"translate("+xh(e[4]*a)/a+" "+xh(e[5]*a)/a+")":GG(e)}}function _E(r,e,t){for(var a=r.points,n=[],i=0;i"u"){var _="Image width/height must been given explictly in svg-ssr renderer.";zr(d,_),zr(p,_)}else if(d==null||p==null){var S=function(N,O){if(N){var k=N.elm,G=d||O.width,H=p||O.height;N.tag==="pattern"&&(u?(H=1,G/=i.width):f&&(G=1,H/=i.height)),N.attrs.width=G,N.attrs.height=H,k&&(k.setAttribute("width",G),k.setAttribute("height",H))}},b=Cb(y,null,r,function(N){l||S(C,N),S(v,N)});b&&b.width&&b.height&&(d=d||b.width,p=p||b.height)}v=rr("image","img",{href:y,width:d,height:p}),o.width=d,o.height=p}else n.svgElement&&(v=Dt(n.svgElement),o.width=n.svgWidth,o.height=n.svgHeight);if(v){var w,A;l?w=A=1:u?(A=1,w=o.width/i.width):f?(w=1,A=o.height/i.height):o.patternUnits="userSpaceOnUse",w!=null&&!isNaN(w)&&(o.width=w),A!=null&&!isNaN(A)&&(o.height=A);var M=o3(n);M&&(o.patternTransform=M);var C=rr("pattern","",o,[v]),L=d2(C),E=a.patternCache,R=E[L];R||(R=a.zrId+"-p"+a.patternIdx++,E[L]=R,o.id=R,C=a.defs[R]=rr("pattern",R,o,[v])),e[t]=Xg(R)}}function wX(r,e,t){var a=t.clipPathCache,n=t.defs,i=a[r.id];if(!i){i=t.zrId+"-c"+t.clipPathIdx++;var o={id:i};a[r.id]=i,n[i]=rr("clipPath",i,o,[M4(r,t)])}e["clip-path"]=Xg(i)}function bE(r){return document.createTextNode(r)}function Is(r,e,t){r.insertBefore(e,t)}function wE(r,e){r.removeChild(e)}function TE(r,e){r.appendChild(e)}function R4(r){return r.parentNode}function I4(r){return r.nextSibling}function o_(r,e){r.textContent=e}var AE=58,TX=120,AX=rr("","");function SS(r){return r===void 0}function Tn(r){return r!==void 0}function DX(r,e,t){for(var a={},n=e;n<=t;++n){var i=r[n].key;i!==void 0&&(a[i]=n)}return a}function zf(r,e){var t=r.key===e.key,a=r.tag===e.tag;return a&&t}function Sh(r){var e,t=r.children,a=r.tag;if(Tn(a)){var n=r.elm=T4(a);if(y2(AX,r),it(t))for(e=0;ei?(y=t[l+1]==null?null:t[l+1].elm,N4(r,y,t,n,l)):Sg(r,e,a,i))}function xu(r,e){var t=e.elm=r.elm,a=r.children,n=e.children;r!==e&&(y2(r,e),SS(e.text)?Tn(a)&&Tn(n)?a!==n&&CX(t,a,n):Tn(n)?(Tn(r.text)&&o_(t,""),N4(t,null,n,0,n.length-1)):Tn(a)?Sg(t,a,0,a.length-1):Tn(r.text)&&o_(t,""):r.text!==e.text&&(Tn(a)&&Sg(t,a,0,a.length-1),o_(t,e.text)))}function MX(r,e){if(zf(r,e))xu(r,e);else{var t=r.elm,a=R4(t);Sh(e),a!==null&&(Is(a,e.elm,I4(t)),Sg(a,[r],0,0))}return e}var LX=0,EX=(function(){function r(e,t,a){if(this.type="svg",this.refreshHover=DE(),this.configLayer=DE(),this.storage=t,this._opts=a=et({},a),this.root=e,this._id="zr"+LX++,this._oldVNode=pE(a.width,a.height),e&&!a.ssr){var n=this._viewport=document.createElement("div");n.style.cssText="position:relative;overflow:hidden";var i=this._svgDom=this._oldVNode.elm=T4("svg");y2(null,this._oldVNode),n.appendChild(i),e.appendChild(n)}this.resize(a.width,a.height)}return r.prototype.getType=function(){return this.type},r.prototype.getViewportRoot=function(){return this._viewport},r.prototype.getViewportRootOffset=function(){var e=this.getViewportRoot();if(e)return{offsetLeft:e.offsetLeft||0,offsetTop:e.offsetTop||0}},r.prototype.getSvgDom=function(){return this._svgDom},r.prototype.refresh=function(){if(this.root){var e=this.renderToVNode({willUpdate:!0});e.attrs.style="position:absolute;left:0;top:0;user-select:none",MX(this._oldVNode,e),this._oldVNode=e}},r.prototype.renderOneToVNode=function(e){return SE(e,xS(this._id))},r.prototype.renderToVNode=function(e){e=e||{};var t=this.storage.getDisplayList(!0),a=this._width,n=this._height,i=xS(this._id);i.animation=e.animation,i.willUpdate=e.willUpdate,i.compress=e.compress;var o=[],s=this._bgVNode=RX(a,n,this._backgroundColor,i);s&&o.push(s);var l=e.compress?null:this._mainVNode=rr("g","main",{},[]);this._paintList(t,i,l?l.children:o),l&&o.push(l);var u=st(Yt(i.defs),function(d){return i.defs[d]});if(u.length&&o.push(rr("defs","defs",{},u)),e.animation){var f=fX(i.cssNodes,i.cssAnims,{newline:!0});if(f){var v=rr("style","stl",{},[],f);o.push(v)}}return pE(a,n,o,e.useViewBox)},r.prototype.renderToString=function(e){return e=e||{},d2(this.renderToVNode({animation:Ot(e.cssAnimation,!0),willUpdate:!1,compress:!0,useViewBox:Ot(e.useViewBox,!0)}),{newline:!0})},r.prototype.setBackgroundColor=function(e){this._backgroundColor=e},r.prototype.getSvgRoot=function(){return this._mainVNode&&this._mainVNode.elm},r.prototype._paintList=function(e,t,a){for(var n=e.length,i=[],o=0,s,l,u=0,f=0;f=0&&!(d&&l&&d[m]===l[m]);m--);for(var _=y-1;_>m;_--)o--,s=i[o-1];for(var S=m+1;S=s)}}for(var v=this.__startIndex;v15)break}}H.prevElClipPaths&&S.restore()};if(b)if(b.length===0)E=_.__endIndex;else for(var N=p.dpr,O=0;O0&&e>n[0]){for(l=0;le);l++);s=a[n[l]]}if(n.splice(l+1,0,e),a[e]=t,!t.virtual)if(s){var u=s.dom;u.nextSibling?o.insertBefore(t.dom,u.nextSibling):o.appendChild(t.dom)}else o.firstChild?o.insertBefore(t.dom,o.firstChild):o.appendChild(t.dom);t.__painter=this}},r.prototype.eachLayer=function(e,t){for(var a=this._zlevelList,n=0;n0?tp:0),this._needsManuallyCompositing),f.__builtin__||vb("ZLevel "+u+" has been used by unkown layer "+f.id),f!==i&&(f.__used=!0,f.__startIndex!==l&&(f.__dirty=!0),f.__startIndex=l,f.incremental?f.__drawIndex=-1:f.__drawIndex=l,t(l),i=f),n.__dirty&fa&&!n.__inHover&&(f.__dirty=!0,f.incremental&&f.__drawIndex<0&&(f.__drawIndex=l))}t(l),this.eachBuiltinLayer(function(v,d){!v.__used&&v.getElementCount()>0&&(v.__dirty=!0,v.__startIndex=v.__endIndex=v.__drawIndex=0),v.__dirty&&v.__drawIndex<0&&(v.__drawIndex=v.__startIndex)})},r.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},r.prototype._clearLayer=function(e){e.clear()},r.prototype.setBackgroundColor=function(e){this._backgroundColor=e,P(this._layers,function(t){t.setUnpainted()})},r.prototype.configLayer=function(e,t){if(t){var a=this._layerConfig;a[e]?zt(a[e],t,!0):a[e]=t;for(var n=0;n-1&&(u.style.stroke=u.style.fill,u.style.fill="#fff",u.style.lineWidth=2),a},e.type="series.line",e.dependencies=["grid","polar"],e.defaultOption={z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0,universalTransition:{divideShape:"clone"},triggerLineEvent:!1},e})(Se);function ku(r,e){var t=r.mapDimensionsAll("defaultedLabel"),a=t.length;if(a===1){var n=Pu(r,e,t[0]);return n!=null?n+"":null}else if(a){for(var i=[],o=0;o=0&&a.push(e[i])}return a.join(" ")}var Zh=(function(r){$(e,r);function e(t,a,n,i){var o=r.call(this)||this;return o.updateData(t,a,n,i),o}return e.prototype._createSymbol=function(t,a,n,i,o){this.removeAll();var s=Ye(t,-1,-1,2,2,null,o);s.attr({z2:100,culling:!0,scaleX:i[0]/2,scaleY:i[1]/2}),s.drift=VX,this._symbolType=t,this.add(s)},e.prototype.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(null,t)},e.prototype.getSymbolType=function(){return this._symbolType},e.prototype.getSymbolPath=function(){return this.childAt(0)},e.prototype.highlight=function(){_i(this.childAt(0))},e.prototype.downplay=function(){xi(this.childAt(0))},e.prototype.setZ=function(t,a){var n=this.childAt(0);n.zlevel=t,n.z=a},e.prototype.setDraggable=function(t,a){var n=this.childAt(0);n.draggable=t,n.cursor=!a&&t?"move":n.cursor},e.prototype.updateData=function(t,a,n,i){this.silent=!1;var o=t.getItemVisual(a,"symbol")||"circle",s=t.hostModel,l=e.getSymbolSize(t,a),u=o!==this._symbolType,f=i&&i.disableAnimation;if(u){var v=t.getItemVisual(a,"symbolKeepAspect");this._createSymbol(o,t,a,l,v)}else{var d=this.childAt(0);d.silent=!1;var p={scaleX:l[0]/2,scaleY:l[1]/2};f?d.attr(p):Jt(d,p,s,a),cn(d)}if(this._updateCommon(t,a,l,n,i),u){var d=this.childAt(0);if(!f){var p={scaleX:this._sizeX,scaleY:this._sizeY,style:{opacity:d.style.opacity}};d.scaleX=d.scaleY=0,d.style.opacity=0,Le(d,p,s,a)}}f&&this.childAt(0).stopAnimation("leave")},e.prototype._updateCommon=function(t,a,n,i,o){var s=this.childAt(0),l=t.hostModel,u,f,v,d,p,y,m,_,S;if(i&&(u=i.emphasisItemStyle,f=i.blurItemStyle,v=i.selectItemStyle,d=i.focus,p=i.blurScope,m=i.labelStatesModels,_=i.hoverScale,S=i.cursorStyle,y=i.emphasisDisabled),!i||t.hasItemOption){var b=i&&i.itemModel?i.itemModel:t.getItemModel(a),w=b.getModel("emphasis");u=w.getModel("itemStyle").getItemStyle(),v=b.getModel(["select","itemStyle"]).getItemStyle(),f=b.getModel(["blur","itemStyle"]).getItemStyle(),d=w.get("focus"),p=w.get("blurScope"),y=w.get("disabled"),m=nr(b),_=w.getShallow("scale"),S=b.getShallow("cursor")}var A=t.getItemVisual(a,"symbolRotate");s.attr("rotation",(A||0)*Math.PI/180||0);var M=ll(t.getItemVisual(a,"symbolOffset"),n);M&&(s.x=M[0],s.y=M[1]),S&&s.attr("cursor",S);var C=t.getItemVisual(a,"style"),L=C.fill;if(s instanceof hr){var E=s.style;s.useStyle(et({image:E.image,x:E.x,y:E.y,width:E.width,height:E.height},C))}else s.__isEmptyBrush?s.useStyle(et({},C)):s.useStyle(C),s.style.decal=null,s.setColor(L,o&&o.symbolInnerColor),s.style.strokeNoScale=!0;var R=t.getItemVisual(a,"liftZ"),N=this._z2;R!=null?N==null&&(this._z2=s.z2,s.z2+=R):N!=null&&(s.z2=N,this._z2=null);var O=o&&o.useNameLabel;Sr(s,m,{labelFetcher:l,labelDataIndex:a,defaultText:k,inheritColor:L,defaultOpacity:C.opacity});function k(F){return O?t.getName(F):ku(t,F)}this._sizeX=n[0]/2,this._sizeY=n[1]/2;var G=s.ensureState("emphasis");G.style=u,s.ensureState("select").style=v,s.ensureState("blur").style=f;var H=_==null||_===!0?Math.max(1.1,3/this._sizeY):isFinite(_)&&_>0?+_:1;G.scaleX=this._sizeX*H,G.scaleY=this._sizeY*H,this.setSymbolScale(1),Pe(this,d,p,y)},e.prototype.setSymbolScale=function(t){this.scaleX=this.scaleY=t},e.prototype.fadeOut=function(t,a,n){var i=this.childAt(0),o=Rt(this).dataIndex,s=n&&n.animation;if(this.silent=i.silent=!0,n&&n.fadeLabel){var l=i.getTextContent();l&&Eo(l,{style:{opacity:0}},a,{dataIndex:o,removeOpt:s,cb:function(){i.removeTextContent()}})}else i.removeTextContent();Eo(i,{style:{opacity:0},scaleX:0,scaleY:0},a,{dataIndex:o,cb:t,removeOpt:s})},e.getSymbolSize=function(t,a){return rc(t.getItemVisual(a,"symbolSize"))},e})(Ct);function VX(r,e){this.parent.drift(r,e)}function l_(r,e,t,a){return e&&!isNaN(e[0])&&!isNaN(e[1])&&!(a.isIgnore&&a.isIgnore(t))&&!(a.clipShape&&!a.clipShape.contain(e[0],e[1]))&&r.getItemVisual(t,"symbol")!=="none"}function LE(r){return r!=null&&!Tt(r)&&(r={isIgnore:r}),r||{}}function EE(r){var e=r.hostModel,t=e.getModel("emphasis");return{emphasisItemStyle:t.getModel("itemStyle").getItemStyle(),blurItemStyle:e.getModel(["blur","itemStyle"]).getItemStyle(),selectItemStyle:e.getModel(["select","itemStyle"]).getItemStyle(),focus:t.get("focus"),blurScope:t.get("blurScope"),emphasisDisabled:t.get("disabled"),hoverScale:t.get("scale"),labelStatesModels:nr(e),cursorStyle:e.get("cursor")}}var Wh=(function(){function r(e){this.group=new Ct,this._SymbolCtor=e||Zh}return r.prototype.updateData=function(e,t){this._progressiveEls=null,t=LE(t);var a=this.group,n=e.hostModel,i=this._data,o=this._SymbolCtor,s=t.disableAnimation,l=EE(e),u={disableAnimation:s},f=t.getSymbolPoint||function(v){return e.getItemLayout(v)};i||a.removeAll(),e.diff(i).add(function(v){var d=f(v);if(l_(e,d,v,t)){var p=new o(e,v,l,u);p.setPosition(d),e.setItemGraphicEl(v,p),a.add(p)}}).update(function(v,d){var p=i.getItemGraphicEl(d),y=f(v);if(!l_(e,y,v,t)){a.remove(p);return}var m=e.getItemVisual(v,"symbol")||"circle",_=p&&p.getSymbolType&&p.getSymbolType();if(!p||_&&_!==m)a.remove(p),p=new o(e,v,l,u),p.setPosition(y);else{p.updateData(e,v,l,u);var S={x:y[0],y:y[1]};s?p.attr(S):Jt(p,S,n)}a.add(p),e.setItemGraphicEl(v,p)}).remove(function(v){var d=i.getItemGraphicEl(v);d&&d.fadeOut(function(){a.remove(d)},n)}).execute(),this._getSymbolPoint=f,this._data=e},r.prototype.updateLayout=function(){var e=this,t=this._data;t&&t.eachItemGraphicEl(function(a,n){var i=e._getSymbolPoint(n);a.setPosition(i),a.markRedraw()})},r.prototype.incrementalPrepareUpdate=function(e){this._seriesScope=EE(e),this._data=null,this.group.removeAll()},r.prototype.incrementalUpdate=function(e,t,a){this._progressiveEls=[],a=LE(a);function n(l){l.isGroup||(l.incremental=!0,l.ensureState("emphasis").hoverLayer=!0)}for(var i=e.start;i0?t=a[0]:a[1]<0&&(t=a[1]),t}function z4(r,e,t,a){var n=NaN;r.stacked&&(n=t.get(t.getCalculationInfo("stackedOverDimension"),a)),isNaN(n)&&(n=r.valueStart);var i=r.baseDataOffset,o=[];return o[i]=t.get(r.baseDim,a),o[1-i]=n,e.dataToPoint(o)}function HX(r,e){var t=[];return e.diff(r).add(function(a){t.push({cmd:"+",idx:a})}).update(function(a,n){t.push({cmd:"=",idx:n,idx1:a})}).remove(function(a){t.push({cmd:"-",idx:a})}).execute(),t}function UX(r,e,t,a,n,i,o,s){for(var l=HX(r,e),u=[],f=[],v=[],d=[],p=[],y=[],m=[],_=O4(n,e,o),S=r.getLayout("points")||[],b=e.getLayout("points")||[],w=0;w=n||m<0)break;if($s(S,b)){if(l){m+=i;continue}break}if(m===t)r[i>0?"moveTo":"lineTo"](S,b),v=S,d=b;else{var w=S-u,A=b-f;if(w*w+A*A<.5){m+=i;continue}if(o>0){for(var M=m+i,C=e[M*2],L=e[M*2+1];C===S&&L===b&&_=a||$s(C,L))p=S,y=b;else{N=C-u,O=L-f;var H=S-u,F=C-S,B=b-f,j=L-b,Y=void 0,K=void 0;if(s==="x"){Y=Math.abs(H),K=Math.abs(F);var nt=N>0?1:-1;p=S-nt*Y*o,y=b,k=S+nt*K*o,G=b}else if(s==="y"){Y=Math.abs(B),K=Math.abs(j);var U=O>0?1:-1;p=S,y=b-U*Y*o,k=S,G=b+U*K*o}else Y=Math.sqrt(H*H+B*B),K=Math.sqrt(F*F+j*j),R=K/(K+Y),p=S-N*o*(1-R),y=b-O*o*(1-R),k=S+N*o*R,G=b+O*o*R,k=io(k,oo(C,S)),G=io(G,oo(L,b)),k=oo(k,io(C,S)),G=oo(G,io(L,b)),N=k-S,O=G-b,p=S-N*Y/K,y=b-O*Y/K,p=io(p,oo(u,S)),y=io(y,oo(f,b)),p=oo(p,io(u,S)),y=oo(y,io(f,b)),N=S-p,O=b-y,k=S+N*K/Y,G=b+O*K/Y}r.bezierCurveTo(v,d,p,y,S,b),v=k,d=G}else r.lineTo(S,b)}u=S,f=b,m+=i}return _}var k4=(function(){function r(){this.smooth=0,this.smoothConstraint=!0}return r})(),FX=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;return a.type="ec-polyline",a}return e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new k4},e.prototype.buildPath=function(t,a){var n=a.points,i=0,o=n.length/2;if(a.connectNulls){for(;o>0&&$s(n[o*2-2],n[o*2-1]);o--);for(;i=0){var A=u?(y-l)*w+l:(p-s)*w+s;return u?[t,A]:[A,t]}s=p,l=y;break;case o.C:p=i[v++],y=i[v++],m=i[v++],_=i[v++],S=i[v++],b=i[v++];var M=u?qp(s,p,m,S,t,f):qp(l,y,_,b,t,f);if(M>0)for(var C=0;C=0){var A=u?tr(l,y,_,b,L):tr(s,p,m,S,L);return u?[t,A]:[A,t]}}s=S,l=b;break}}},e})(Ut),jX=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e})(k4),B4=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;return a.type="ec-polygon",a}return e.prototype.getDefaultShape=function(){return new jX},e.prototype.buildPath=function(t,a){var n=a.points,i=a.stackedOnPoints,o=0,s=n.length/2,l=a.smoothMonotone;if(a.connectNulls){for(;s>0&&$s(n[s*2-2],n[s*2-1]);s--);for(;oe){i?t.push(o(i,l,e)):n&&t.push(o(n,l,0),o(n,l,e));break}else n&&(t.push(o(n,l,0)),n=null),t.push(l),i=l}return t}function ZX(r,e,t){var a=r.getVisual("visualMeta");if(!(!a||!a.length||!r.count())&&e.type==="cartesian2d"){for(var n,i,o=a.length-1;o>=0;o--){var s=r.getDimensionInfo(a[o].dimension);if(n=s&&s.coordDim,n==="x"||n==="y"){i=a[o];break}}if(i){var l=e.getAxis(n),u=st(i.stops,function(w){return{coord:l.toGlobalCoord(l.dataToCoord(w.value)),color:w.color}}),f=u.length,v=i.outerColors.slice();f&&u[0].coord>u[f-1].coord&&(u.reverse(),v.reverse());var d=XX(u,n==="x"?t.getWidth():t.getHeight()),p=d.length;if(!p&&f)return u[0].coord<0?v[1]?v[1]:u[f-1].color:v[0]?v[0]:u[0].color;var y=10,m=d[0].coord-y,_=d[p-1].coord+y,S=_-m;if(S<.001)return"transparent";P(d,function(w){w.offset=(w.coord-m)/S}),d.push({offset:p?d[p-1].offset:.5,color:v[1]||"transparent"}),d.unshift({offset:p?d[0].offset:.5,color:v[0]||"transparent"});var b=new Bh(0,0,0,0,d,!0);return b[n]=m,b[n+"2"]=_,b}}}function WX(r,e,t){var a=r.get("showAllSymbol"),n=a==="auto";if(!(a&&!n)){var i=t.getAxesByScale("ordinal")[0];if(i&&!(n&&qX(i,e))){var o=e.mapDimension(i.dim),s={};return P(i.getViewLabels(),function(l){var u=i.scale.getRawOrdinalNumber(l.tickValue);s[u]=1}),function(l){return!s.hasOwnProperty(e.get(o,l))}}}}function qX(r,e){var t=r.getExtent(),a=Math.abs(t[1]-t[0])/r.scale.count();isNaN(a)&&(a=0);for(var n=e.count(),i=Math.max(1,Math.round(n/5)),o=0;oa)return!1;return!0}function $X(r,e){return isNaN(r)||isNaN(e)}function KX(r){for(var e=r.length/2;e>0&&$X(r[e*2-2],r[e*2-1]);e--);return e-1}function OE(r,e){return[r[e*2],r[e*2+1]]}function QX(r,e,t){for(var a=r.length/2,n=t==="x"?0:1,i,o,s=0,l=-1,u=0;u=e||i>=e&&o<=e){l=u;break}s=u,i=o}return{range:[s,l],t:(e-i)/(o-i)}}function H4(r){if(r.get(["endLabel","show"]))return!0;for(var e=0;e0&&t.get(["emphasis","lineStyle","width"])==="bolder"){var nt=m.getState("emphasis").style;nt.lineWidth=+m.style.lineWidth+1}Rt(m).seriesIndex=t.seriesIndex,Pe(m,j,Y,K);var U=PE(t.get("smooth")),W=t.get("smoothMonotone");if(m.setShape({smooth:U,smoothMonotone:W,connectNulls:E}),_){var rt=l.getCalculationInfo("stackedOnSeries"),ot=0;_.useStyle(wt(f.getAreaStyle(),{fill:G,opacity:.7,lineJoin:"bevel",decal:l.getVisual("style").decal})),rt&&(ot=PE(rt.get("smooth"))),_.setShape({smooth:U,stackedOnSmooth:ot,smoothMonotone:W,connectNulls:E}),xr(_,t,"areaStyle"),Rt(_).seriesIndex=t.seriesIndex,Pe(_,j,Y,K)}var ht=function(gt){i._changePolyState(gt)};l.eachItemGraphicEl(function(gt){gt&&(gt.onHoverStateChange=ht)}),this._polyline.onHoverStateChange=ht,this._data=l,this._coordSys=o,this._stackedOnPoints=C,this._points=v,this._step=O,this._valueOrigin=A,t.get("triggerLineEvent")&&(this.packEventData(t,m),_&&this.packEventData(t,_))},e.prototype.packEventData=function(t,a){Rt(a).eventData={componentType:"series",componentSubType:"line",componentIndex:t.componentIndex,seriesIndex:t.seriesIndex,seriesName:t.name,seriesType:"line"}},e.prototype.highlight=function(t,a,n,i){var o=t.getData(),s=tl(o,i);if(this._changePolyState("emphasis"),!(s instanceof Array)&&s!=null&&s>=0){var l=o.getLayout("points"),u=o.getItemGraphicEl(s);if(!u){var f=l[s*2],v=l[s*2+1];if(isNaN(f)||isNaN(v)||this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(f,v))return;var d=t.get("zlevel")||0,p=t.get("z")||0;u=new Zh(o,s),u.x=f,u.y=v,u.setZ(d,p);var y=u.getSymbolPath().getTextContent();y&&(y.zlevel=d,y.z=p,y.z2=this._polyline.z2+1),u.__temp=!0,o.setItemGraphicEl(s,u),u.stopSymbolAnimation(!0),this.group.add(u)}u.highlight()}else de.prototype.highlight.call(this,t,a,n,i)},e.prototype.downplay=function(t,a,n,i){var o=t.getData(),s=tl(o,i);if(this._changePolyState("normal"),s!=null&&s>=0){var l=o.getItemGraphicEl(s);l&&(l.__temp?(o.setItemGraphicEl(s,null),this.group.remove(l)):l.downplay())}else de.prototype.downplay.call(this,t,a,n,i)},e.prototype._changePolyState=function(t){var a=this._polygon;ag(this._polyline,t),a&&ag(a,t)},e.prototype._newPolyline=function(t){var a=this._polyline;return a&&this._lineGroup.remove(a),a=new FX({shape:{points:t},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(a),this._polyline=a,a},e.prototype._newPolygon=function(t,a){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new B4({shape:{points:t,stackedOnPoints:a},segmentIgnoreThreshold:2}),this._lineGroup.add(n),this._polygon=n,n},e.prototype._initSymbolLabelAnimation=function(t,a,n){var i,o,s=a.getBaseAxis(),l=s.inverse;a.type==="cartesian2d"?(i=s.isHorizontal(),o=!1):a.type==="polar"&&(i=s.dim==="angle",o=!0);var u=t.hostModel,f=u.get("animationDuration");bt(f)&&(f=f(null));var v=u.get("animationDelay")||0,d=bt(v)?v(null):v;t.eachItemGraphicEl(function(p,y){var m=p;if(m){var _=[p.x,p.y],S=void 0,b=void 0,w=void 0;if(n)if(o){var A=n,M=a.pointToCoord(_);i?(S=A.startAngle,b=A.endAngle,w=-M[1]/180*Math.PI):(S=A.r0,b=A.r,w=M[0])}else{var C=n;i?(S=C.x,b=C.x+C.width,w=p.x):(S=C.y+C.height,b=C.y,w=p.y)}var L=b===S?0:(w-S)/(b-S);l&&(L=1-L);var E=bt(v)?v(y):f*L+d,R=m.getSymbolPath(),N=R.getTextContent();m.attr({scaleX:0,scaleY:0}),m.animateTo({scaleX:1,scaleY:1},{duration:200,setToFinal:!0,delay:E}),N&&N.animateFrom({style:{opacity:0}},{duration:300,delay:E}),R.disableLabelAnimation=!0}})},e.prototype._initOrUpdateEndLabel=function(t,a,n){var i=t.getModel("endLabel");if(H4(t)){var o=t.getData(),s=this._polyline,l=o.getLayout("points");if(!l){s.removeTextContent(),this._endLabel=null;return}var u=this._endLabel;u||(u=this._endLabel=new $t({z2:200}),u.ignoreClip=!0,s.setTextContent(this._endLabel),s.disableLabelAnimation=!0);var f=KX(l);f>=0&&(Sr(s,nr(t,"endLabel"),{inheritColor:n,labelFetcher:t,labelDataIndex:f,defaultText:function(v,d,p){return p!=null?P4(o,p):ku(o,v)},enableTextSetter:!0},JX(i,a)),s.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},e.prototype._endLabelOnDuring=function(t,a,n,i,o,s,l){var u=this._endLabel,f=this._polyline;if(u){t<1&&i.originalX==null&&(i.originalX=u.x,i.originalY=u.y);var v=n.getLayout("points"),d=n.hostModel,p=d.get("connectNulls"),y=s.get("precision"),m=s.get("distance")||0,_=l.getBaseAxis(),S=_.isHorizontal(),b=_.inverse,w=a.shape,A=b?S?w.x:w.y+w.height:S?w.x+w.width:w.y,M=(S?m:0)*(b?-1:1),C=(S?0:-m)*(b?-1:1),L=S?"x":"y",E=QX(v,A,L),R=E.range,N=R[1]-R[0],O=void 0;if(N>=1){if(N>1&&!p){var k=OE(v,R[0]);u.attr({x:k[0]+M,y:k[1]+C}),o&&(O=d.getRawValue(R[0]))}else{var k=f.getPointOn(A,L);k&&u.attr({x:k[0]+M,y:k[1]+C});var G=d.getRawValue(R[0]),H=d.getRawValue(R[1]);o&&(O=A3(n,y,G,H,E.t))}i.lastFrameIndex=R[0]}else{var F=t===1||i.lastFrameIndex>0?R[0]:0,k=OE(v,F);o&&(O=d.getRawValue(F)),u.attr({x:k[0]+M,y:k[1]+C})}if(o){var B=qu(u);typeof B.setLabelText=="function"&&B.setLabelText(O)}}},e.prototype._doUpdateAnimation=function(t,a,n,i,o,s,l){var u=this._polyline,f=this._polygon,v=t.hostModel,d=UX(this._data,t,this._stackedOnPoints,a,this._coordSys,n,this._valueOrigin),p=d.current,y=d.stackedOnCurrent,m=d.next,_=d.stackedOnNext;if(o&&(p=so(d.current,n,o,l),y=so(d.stackedOnCurrent,n,o,l),m=so(d.next,n,o,l),_=so(d.stackedOnNext,n,o,l)),NE(p,m)>3e3||f&&NE(y,_)>3e3){u.stopAnimation(),u.setShape({points:m}),f&&(f.stopAnimation(),f.setShape({points:m,stackedOnPoints:_}));return}u.shape.__points=d.current,u.shape.points=p;var S={shape:{points:m}};d.current!==p&&(S.shape.__points=d.next),u.stopAnimation(),Jt(u,S,v),f&&(f.setShape({points:p,stackedOnPoints:y}),f.stopAnimation(),Jt(f,{shape:{stackedOnPoints:_}},v),u.shape.points!==f.shape.points&&(f.shape.points=u.shape.points));for(var b=[],w=d.status,A=0;Ae&&(e=r[t]);return isFinite(e)?e:NaN},min:function(r){for(var e=1/0,t=0;t10&&o.type==="cartesian2d"&&i){var l=o.getBaseAxis(),u=o.getOtherAxis(l),f=l.getExtent(),v=a.getDevicePixelRatio(),d=Math.abs(f[1]-f[0])*(v||1),p=Math.round(s/d);if(isFinite(p)&&p>1){i==="lttb"&&e.setData(n.lttbDownSample(n.mapDimension(u.dim),1/p));var y=void 0;vt(i)?y=eZ[i]:bt(i)&&(y=i),y&&e.setData(n.downSample(n.mapDimension(u.dim),1/p,y,rZ))}}}}}function aZ(r){r.registerChartView(tZ),r.registerSeriesModel(BX),r.registerLayout(qh("line",!0)),r.registerVisual({seriesType:"line",reset:function(e){var t=e.getData(),a=e.getModel("lineStyle").getLineStyle();a&&!a.stroke&&(a.stroke=t.getVisual("style").fill),t.setVisual("legendLineStyle",a)}}),r.registerProcessor(r.PRIORITY.PROCESSOR.STATISTIC,U4("line"))}var bh=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.getInitialData=function(t,a){return Di(null,this,{useEncodeDefaulter:!0})},e.prototype.getMarkerPosition=function(t,a,n){var i=this.coordinateSystem;if(i&&i.clampData){var o=i.clampData(t),s=i.dataToPoint(o);if(n)P(i.getAxes(),function(d,p){if(d.type==="category"&&a!=null){var y=d.getTicksCoords(),m=o[p],_=a[p]==="x1"||a[p]==="y1";if(_&&(m+=1),y.length<2)return;if(y.length===2){s[p]=d.toGlobalCoord(d.getExtent()[_?1:0]);return}for(var S=void 0,b=void 0,w=1,A=0;Am){b=(M+S)/2;break}A===1&&(w=C-y[0].tickValue)}b==null&&(S?S&&(b=y[y.length-1].coord):b=y[0].coord),s[p]=d.toGlobalCoord(b)}});else{var l=this.getData(),u=l.getLayout("offset"),f=l.getLayout("size"),v=i.getBaseAxis().isHorizontal()?0:1;s[v]+=u+f/2}return s}return[NaN,NaN]},e.type="series.__base_bar__",e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod"},e})(Se);Se.registerClass(bh);var nZ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.getInitialData=function(){return Di(null,this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},e.prototype.getProgressive=function(){return this.get("large")?this.get("progressive"):!1},e.prototype.getProgressiveThreshold=function(){var t=this.get("progressiveThreshold"),a=this.get("largeThreshold");return a>t&&(t=a),t},e.prototype.brushSelector=function(t,a,n){return n.rect(a.getItemLayout(t))},e.type="series.bar",e.dependencies=["grid","polar"],e.defaultOption=zo(bh.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:"#212121"}},realtimeSort:!1}),e})(bh),iZ=(function(){function r(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0}return r})(),bg=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;return a.type="sausage",a}return e.prototype.getDefaultShape=function(){return new iZ},e.prototype.buildPath=function(t,a){var n=a.cx,i=a.cy,o=Math.max(a.r0||0,0),s=Math.max(a.r,0),l=(s-o)*.5,u=o+l,f=a.startAngle,v=a.endAngle,d=a.clockwise,p=Math.PI*2,y=d?v-fMath.PI/2&&fs)return!0;s=v}return!1},e.prototype._isOrderDifferentInView=function(t,a){for(var n=a.scale,i=n.getExtent(),o=Math.max(0,i[0]),s=Math.min(i[1],n.getOrdinalMeta().categories.length-1);o<=s;++o)if(t.ordinalNumbers[o]!==n.getRawOrdinalNumber(o))return!0},e.prototype._updateSortWithinSameData=function(t,a,n,i){if(this._isOrderChangedWithinSameData(t,a,n)){var o=this._dataSort(t,n,a);this._isOrderDifferentInView(o,n)&&(this._removeOnRenderedListener(i),i.dispatchAction({type:"changeAxisOrder",componentType:n.dim+"Axis",axisId:n.index,sortInfo:o}))}},e.prototype._dispatchInitSort=function(t,a,n){var i=a.baseAxis,o=this._dataSort(t,i,function(s){return t.get(t.mapDimension(a.otherAxis.dim),s)});n.dispatchAction({type:"changeAxisOrder",componentType:i.dim+"Axis",isInitSort:!0,axisId:i.index,sortInfo:o})},e.prototype.remove=function(t,a){this._clear(this._model),this._removeOnRenderedListener(a)},e.prototype.dispose=function(t,a){this._removeOnRenderedListener(a)},e.prototype._removeOnRenderedListener=function(t){this._onRendered&&(t.getZr().off("rendered",this._onRendered),this._onRendered=null)},e.prototype._clear=function(t){var a=this.group,n=this._data;t&&t.isAnimationEnabled()&&n&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],n.eachItemGraphicEl(function(i){fh(i,t,Rt(i).dataIndex)})):a.removeAll(),this._data=null,this._isFirstFrame=!0},e.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},e.type="bar",e})(de),zE={cartesian2d:function(r,e){var t=e.width<0?-1:1,a=e.height<0?-1:1;t<0&&(e.x+=e.width,e.width=-e.width),a<0&&(e.y+=e.height,e.height=-e.height);var n=r.x+r.width,i=r.y+r.height,o=c_(e.x,r.x),s=f_(e.x+e.width,n),l=c_(e.y,r.y),u=f_(e.y+e.height,i),f=sn?s:o,e.y=v&&l>i?u:l,e.width=f?0:s-o,e.height=v?0:u-l,t<0&&(e.x+=e.width,e.width=-e.width),a<0&&(e.y+=e.height,e.height=-e.height),f||v},polar:function(r,e){var t=e.r0<=e.r?1:-1;if(t<0){var a=e.r;e.r=e.r0,e.r0=a}var n=f_(e.r,r.r),i=c_(e.r0,r.r0);e.r=n,e.r0=i;var o=n-i<0;if(t<0){var a=e.r;e.r=e.r0,e.r0=a}return o}},kE={cartesian2d:function(r,e,t,a,n,i,o,s,l){var u=new Wt({shape:et({},a),z2:1});if(u.__dataIndex=t,u.name="item",i){var f=u.shape,v=n?"height":"width";f[v]=0}return u},polar:function(r,e,t,a,n,i,o,s,l){var u=!n&&l?bg:Br,f=new u({shape:a,z2:1});f.name="item";var v=F4(n);if(f.calculateTextPosition=oZ(v,{isRoundCap:u===bg}),i){var d=f.shape,p=n?"r":"endAngle",y={};d[p]=n?a.r0:a.startAngle,y[p]=a[p],(s?Jt:Le)(f,{shape:y},i)}return f}};function cZ(r,e){var t=r.get("realtimeSort",!0),a=e.getBaseAxis();if(t&&a.type==="category"&&e.type==="cartesian2d")return{baseAxis:a,otherAxis:e.getOtherAxis(a)}}function BE(r,e,t,a,n,i,o,s){var l,u;i?(u={x:a.x,width:a.width},l={y:a.y,height:a.height}):(u={y:a.y,height:a.height},l={x:a.x,width:a.width}),s||(o?Jt:Le)(t,{shape:l},e,n,null);var f=e?r.baseAxis.model:null;(o?Jt:Le)(t,{shape:u},f,n)}function VE(r,e){for(var t=0;t0?1:-1,o=a.height>0?1:-1;return{x:a.x+i*n/2,y:a.y+o*n/2,width:a.width-i*n,height:a.height-o*n}},polar:function(r,e,t){var a=r.getItemLayout(e);return{cx:a.cx,cy:a.cy,r0:a.r0,r:a.r,startAngle:a.startAngle,endAngle:a.endAngle,clockwise:a.clockwise}}};function vZ(r){return r.startAngle!=null&&r.endAngle!=null&&r.startAngle===r.endAngle}function F4(r){return(function(e){var t=e?"Arc":"Angle";return function(a){switch(a){case"start":case"insideStart":case"end":case"insideEnd":return a+t;default:return a}}})(r)}function HE(r,e,t,a,n,i,o,s){var l=e.getItemVisual(t,"style");if(s){if(!i.get("roundCap")){var f=r.shape,v=Us(a.getModel("itemStyle"),f,!0);et(f,v),r.setShape(f)}}else{var u=a.get(["itemStyle","borderRadius"])||0;r.setShape("r",u)}r.useStyle(l);var d=a.getShallow("cursor");d&&r.attr("cursor",d);var p=s?o?n.r>=n.r0?"endArc":"startArc":n.endAngle>=n.startAngle?"endAngle":"startAngle":o?n.height>=0?"bottom":"top":n.width>=0?"right":"left",y=nr(a);Sr(r,y,{labelFetcher:i,labelDataIndex:t,defaultText:ku(i.getData(),t),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:p});var m=r.getTextContent();if(s&&m){var _=a.get(["label","position"]);r.textConfig.inside=_==="middle"?!0:null,sZ(r,_==="outside"?p:_,F4(o),a.get(["label","rotate"]))}cP(m,y,i.getRawValue(t),function(b){return P4(e,b)});var S=a.getModel(["emphasis"]);Pe(r,S.get("focus"),S.get("blurScope"),S.get("disabled")),xr(r,a),vZ(n)&&(r.style.fill="none",r.style.stroke="none",P(r.states,function(b){b.style&&(b.style.fill=b.style.stroke="none")}))}function dZ(r,e){var t=r.get(["itemStyle","borderColor"]);if(!t||t==="none")return 0;var a=r.get(["itemStyle","borderWidth"])||0,n=isNaN(e.width)?Number.MAX_VALUE:Math.abs(e.width),i=isNaN(e.height)?Number.MAX_VALUE:Math.abs(e.height);return Math.min(a,n,i)}var pZ=(function(){function r(){}return r})(),UE=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;return a.type="largeBar",a}return e.prototype.getDefaultShape=function(){return new pZ},e.prototype.buildPath=function(t,a){for(var n=a.points,i=this.baseDimIdx,o=1-this.baseDimIdx,s=[],l=[],u=this.barWidth,f=0;f=0?t:null},30,!1);function gZ(r,e,t){for(var a=r.baseDimIdx,n=1-a,i=r.shape.points,o=r.largeDataIndices,s=[],l=[],u=r.barWidth,f=0,v=i.length/3;f=s[0]&&e<=s[0]+l[0]&&t>=s[1]&&t<=s[1]+l[1])return o[f]}return-1}function j4(r,e,t){if(cl(t,"cartesian2d")){var a=e,n=t.getArea();return{x:r?a.x:n.x,y:r?n.y:a.y,width:r?a.width:n.width,height:r?n.height:a.height}}else{var n=t.getArea(),i=e;return{cx:n.cx,cy:n.cy,r0:r?n.r0:i.r0,r:r?n.r:i.r,startAngle:r?i.startAngle:0,endAngle:r?i.endAngle:Math.PI*2}}}function yZ(r,e,t){var a=r.type==="polar"?Br:Wt;return new a({shape:j4(e,t,r),silent:!0,z2:0})}function mZ(r){r.registerChartView(uZ),r.registerSeriesModel(nZ),r.registerLayout(r.PRIORITY.VISUAL.LAYOUT,It(KO,"bar")),r.registerLayout(r.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,QO("bar")),r.registerProcessor(r.PRIORITY.PROCESSOR.STATISTIC,U4("bar")),r.registerAction({type:"changeAxisOrder",event:"changeAxisOrder",update:"update"},function(e,t){var a=e.componentType||"series";t.eachComponent({mainType:a,query:e},function(n){e.sortInfo&&n.axis.setCategorySortInfo(e.sortInfo)})})}var np=Math.PI*2,YE=Math.PI/180;function Y4(r,e){return Qe(r.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function X4(r,e){var t=Y4(r,e),a=r.get("center"),n=r.get("radius");it(n)||(n=[0,n]);var i=ft(t.width,e.getWidth()),o=ft(t.height,e.getHeight()),s=Math.min(i,o),l=ft(n[0],s/2),u=ft(n[1],s/2),f,v,d=r.coordinateSystem;if(d){var p=d.dataToPoint(a);f=p[0]||0,v=p[1]||0}else it(a)||(a=[a,a]),f=ft(a[0],i)+t.x,v=ft(a[1],o)+t.y;return{cx:f,cy:v,r0:l,r:u}}function _Z(r,e,t){e.eachSeriesByType(r,function(a){var n=a.getData(),i=n.mapDimension("value"),o=Y4(a,t),s=X4(a,t),l=s.cx,u=s.cy,f=s.r,v=s.r0,d=-a.get("startAngle")*YE,p=a.get("minAngle")*YE,y=0;n.each(i,function(N){!isNaN(N)&&y++});var m=n.getSum(i),_=Math.PI/(m||y)*2,S=a.get("clockwise"),b=a.get("roseType"),w=a.get("stillShowZeroSum"),A=n.getDataExtent(i);A[0]=0;var M=np,C=0,L=d,E=S?1:-1;if(n.setLayout({viewRect:o,r:f}),n.each(i,function(N,O){var k;if(isNaN(N)){n.setItemLayout(O,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:S,cx:l,cy:u,r0:v,r:b?NaN:f});return}b!=="area"?k=m===0&&w?_:N*_:k=np/y,kt?S:_,M=Math.abs(w.label.y-t);if(M>=A.maxY){var C=w.label.x-e-w.len2*n,L=a+w.len,E=Math.abs(C)r.unconstrainedWidth?null:p:null;a.setStyle("width",y)}var m=a.getBoundingRect();i.width=m.width;var _=(a.style.margin||0)+2.1;i.height=m.height+_,i.y-=(i.height-v)/2}}}function h_(r){return r.position==="center"}function bZ(r){var e=r.getData(),t=[],a,n,i=!1,o=(r.get("minShowLabelAngle")||0)*xZ,s=e.getLayout("viewRect"),l=e.getLayout("r"),u=s.width,f=s.x,v=s.y,d=s.height;function p(C){C.ignore=!0}function y(C){if(!C.ignore)return!0;for(var L in C.states)if(C.states[L].ignore===!1)return!0;return!1}e.each(function(C){var L=e.getItemGraphicEl(C),E=L.shape,R=L.getTextContent(),N=L.getTextGuideLine(),O=e.getItemModel(C),k=O.getModel("label"),G=k.get("position")||O.get(["emphasis","label","position"]),H=k.get("distanceToLabelLine"),F=k.get("alignTo"),B=ft(k.get("edgeDistance"),u),j=k.get("bleedMargin"),Y=O.getModel("labelLine"),K=Y.get("length");K=ft(K,u);var nt=Y.get("length2");if(nt=ft(nt,u),Math.abs(E.endAngle-E.startAngle)0?"right":"left":W>0?"left":"right"}var Ce=Math.PI,be=0,or=k.get("rotate");if(Qt(or))be=or*(Ce/180);else if(G==="center")be=0;else if(or==="radial"||or===!0){var pa=W<0?-U+Ce:-U;be=pa}else if(or==="tangential"&&G!=="outside"&&G!=="outer"){var sr=Math.atan2(W,rt);sr<0&&(sr=Ce*2+sr);var Ci=rt>0;Ci&&(sr=Ce+sr),be=sr-Ce}if(i=!!be,R.x=ot,R.y=ht,R.rotation=be,R.setStyle({verticalAlign:"middle"}),yt){R.setStyle({align:mt});var nc=R.states.select;nc&&(nc.x+=R.x,nc.y+=R.y)}else{var ga=R.getBoundingRect().clone();ga.applyTransform(R.getComputedTransform());var ev=(R.style.margin||0)+2.1;ga.y-=ev/2,ga.height+=ev,t.push({label:R,labelLine:N,position:G,len:K,len2:nt,minTurnAngle:Y.get("minTurnAngle"),maxSurfaceAngle:Y.get("maxSurfaceAngle"),surfaceNormal:new Pt(W,rt),linePoints:gt,textAlign:mt,labelDistance:H,labelAlignTo:F,edgeDistance:B,bleedMargin:j,rect:ga,unconstrainedWidth:ga.width,labelStyleWidth:R.style.width})}L.setTextConfig({inside:yt})}}),!i&&r.get("avoidLabelOverlap")&&SZ(t,a,n,l,u,d,f,v);for(var m=0;m0){for(var f=o.getItemLayout(0),v=1;isNaN(f&&f.startAngle)&&v=i.r0}},e.type="pie",e})(de);function ac(r,e,t){e=it(e)&&{coordDimensions:e}||et({encodeDefine:r.getEncode()},e);var a=r.getSource(),n=jh(a,e).dimensions,i=new Pr(n,r);return i.initData(a,t),i}var Kh=(function(){function r(e,t){this._getDataWithEncodedVisual=e,this._getRawData=t}return r.prototype.getAllNames=function(){var e=this._getRawData();return e.mapArray(e.getName)},r.prototype.containName=function(e){var t=this._getRawData();return t.indexOfName(e)>=0},r.prototype.indexOfName=function(e){var t=this._getDataWithEncodedVisual();return t.indexOfName(e)},r.prototype.getItemVisual=function(e,t){var a=this._getDataWithEncodedVisual();return a.getItemVisual(e,t)},r})(),AZ=Kt(),DZ=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.init=function(t){r.prototype.init.apply(this,arguments),this.legendVisualProvider=new Kh(dt(this.getData,this),dt(this.getRawData,this)),this._defaultLabelLine(t)},e.prototype.mergeOption=function(){r.prototype.mergeOption.apply(this,arguments)},e.prototype.getInitialData=function(){return ac(this,{coordDimensions:["value"],encodeDefaulter:It(Fb,this)})},e.prototype.getDataParams=function(t){var a=this.getData(),n=AZ(a),i=n.seats;if(!i){var o=[];a.each(a.mapDimension("value"),function(l){o.push(l)}),i=n.seats=_8(o,a.hostModel.get("percentPrecision"))}var s=r.prototype.getDataParams.call(this,t);return s.percent=i[t]||0,s.$vars.push("percent"),s},e.prototype._defaultLabelLine=function(t){Js(t,"labelLine",["show"]);var a=t.labelLine,n=t.emphasis.labelLine;a.show=a.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.type="series.pie",e.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},e})(Se);function CZ(r){return{seriesType:r,reset:function(e,t){var a=e.getData();a.filterSelf(function(n){var i=a.mapDimension("value"),o=a.get(i,n);return!(Qt(o)&&!isNaN(o)&&o<0)})}}}function MZ(r){r.registerChartView(TZ),r.registerSeriesModel(DZ),gO("pie",r.registerAction),r.registerLayout(It(_Z,"pie")),r.registerProcessor($h("pie")),r.registerProcessor(CZ("pie"))}var LZ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.hasSymbolVisual=!0,t}return e.prototype.getInitialData=function(t,a){return Di(null,this,{useEncodeDefaulter:!0})},e.prototype.getProgressive=function(){var t=this.option.progressive;return t??(this.option.large?5e3:this.get("progressive"))},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return t??(this.option.large?1e4:this.get("progressiveThreshold"))},e.prototype.brushSelector=function(t,a,n){return n.point(a.getItemLayout(t))},e.prototype.getZLevelKey=function(){return this.getData().count()>this.getProgressiveThreshold()?this.id:""},e.type="series.scatter",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},emphasis:{scale:!0},clip:!0,select:{itemStyle:{borderColor:"#212121"}},universalTransition:{divideShape:"clone"}},e})(Se),W4=4,EZ=(function(){function r(){}return r})(),RZ=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;return a._off=0,a.hoverDataIdx=-1,a}return e.prototype.getDefaultShape=function(){return new EZ},e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.buildPath=function(t,a){var n=a.points,i=a.size,o=this.symbolProxy,s=o.shape,l=t.getContext?t.getContext():t,u=l&&i[0]=0;u--){var f=u*2,v=i[f]-s/2,d=i[f+1]-l/2;if(t>=v&&a>=d&&t<=v+s&&a<=d+l)return u}return-1},e.prototype.contain=function(t,a){var n=this.transformCoordToLocal(t,a),i=this.getBoundingRect();if(t=n[0],a=n[1],i.contain(t,a)){var o=this.hoverDataIdx=this.findDataIndex(t,a);return o>=0}return this.hoverDataIdx=-1,!1},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var a=this.shape,n=a.points,i=a.size,o=i[0],s=i[1],l=1/0,u=1/0,f=-1/0,v=-1/0,d=0;d=0&&(u.dataIndex=v+(e.startIndex||0))})},r.prototype.remove=function(){this._clear()},r.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},r})(),NZ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){var i=t.getData(),o=this._updateSymbolDraw(i,t);o.updateData(i,{clipShape:this._getClipShape(t)}),this._finished=!0},e.prototype.incrementalPrepareRender=function(t,a,n){var i=t.getData(),o=this._updateSymbolDraw(i,t);o.incrementalPrepareUpdate(i),this._finished=!1},e.prototype.incrementalRender=function(t,a,n){this._symbolDraw.incrementalUpdate(t,a.getData(),{clipShape:this._getClipShape(a)}),this._finished=t.end===a.getData().count()},e.prototype.updateTransform=function(t,a,n){var i=t.getData();if(this.group.dirty(),!this._finished||i.count()>1e4)return{update:!0};var o=qh("").reset(t,a,n);o.progress&&o.progress({start:0,end:i.count(),count:i.count()},i),this._symbolDraw.updateLayout(i)},e.prototype.eachRendered=function(t){this._symbolDraw&&this._symbolDraw.eachRendered(t)},e.prototype._getClipShape=function(t){var a=t.coordinateSystem,n=a&&a.getArea&&a.getArea();return t.get("clip",!0)?n:null},e.prototype._updateSymbolDraw=function(t,a){var n=this._symbolDraw,i=a.pipelineContext,o=i.large;return(!n||o!==this._isLargeDraw)&&(n&&n.remove(),n=this._symbolDraw=o?new IZ:new Wh,this._isLargeDraw=o,this.group.removeAll()),this.group.add(n.group),n},e.prototype.remove=function(t,a){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},e.prototype.dispose=function(){},e.type="scatter",e})(de),PZ=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.type="grid",e.dependencies=["xAxis","yAxis"],e.layoutMode="box",e.defaultOption={show:!1,z:0,left:"10%",top:60,right:"10%",bottom:70,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},e})(jt),wS=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",je).models[0]},e.type="cartesian2dAxis",e})(jt);Xe(wS,Xh);var q4={show:!0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#6E7079",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#E0E6F1"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(210,219,238,0.2)"]}}},OZ=zt({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},q4),m2=zt({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#F4F7FD",width:1}}},q4),zZ=zt({splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},m2),kZ=wt({logBase:10},m2);const $4={category:OZ,value:m2,time:zZ,log:kZ};var BZ={value:1,category:1,time:1,log:1};function Bu(r,e,t,a){P(BZ,function(n,i){var o=zt(zt({},$4[i],!0),a,!0),s=(function(l){$(u,l);function u(){var f=l!==null&&l.apply(this,arguments)||this;return f.type=e+"Axis."+i,f}return u.prototype.mergeDefaultAndTheme=function(f,v){var d=dh(this),p=d?Qu(f):{},y=v.getTheme();zt(f,y.get(i+"Axis")),zt(f,this.getDefaultOption()),f.type=ZE(f),d&&Ro(f,p,d)},u.prototype.optionUpdated=function(){var f=this.option;f.type==="category"&&(this.__ordinalMeta=gS.createByAxisModel(this))},u.prototype.getCategories=function(f){var v=this.option;if(v.type==="category")return f?v.data:this.__ordinalMeta.categories},u.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},u.type=e+"Axis."+i,u.defaultOption=o,u})(t);r.registerComponentModel(s)}),r.registerSubTypeDefaulter(e+"Axis",ZE)}function ZE(r){return r.type||(r.data?"category":"value")}var VZ=(function(){function r(e){this.type="cartesian",this._dimList=[],this._axes={},this.name=e||""}return r.prototype.getAxis=function(e){return this._axes[e]},r.prototype.getAxes=function(){return st(this._dimList,function(e){return this._axes[e]},this)},r.prototype.getAxesByScale=function(e){return e=e.toLowerCase(),le(this.getAxes(),function(t){return t.scale.type===e})},r.prototype.addAxis=function(e){var t=e.dim;this._axes[t]=e,this._dimList.push(t)},r})(),TS=["x","y"];function WE(r){return r.type==="interval"||r.type==="time"}var GZ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="cartesian2d",t.dimensions=TS,t}return e.prototype.calcAffineTransform=function(){this._transform=this._invTransform=null;var t=this.getAxis("x").scale,a=this.getAxis("y").scale;if(!(!WE(t)||!WE(a))){var n=t.getExtent(),i=a.getExtent(),o=this.dataToPoint([n[0],i[0]]),s=this.dataToPoint([n[1],i[1]]),l=n[1]-n[0],u=i[1]-i[0];if(!(!l||!u)){var f=(s[0]-o[0])/l,v=(s[1]-o[1])/u,d=o[0]-n[0]*f,p=o[1]-i[0]*v,y=this._transform=[f,0,0,v,d,p];this._invTransform=ju([],y)}}},e.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},e.prototype.containPoint=function(t){var a=this.getAxis("x"),n=this.getAxis("y");return a.contain(a.toLocalCoord(t[0]))&&n.contain(n.toLocalCoord(t[1]))},e.prototype.containData=function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},e.prototype.containZone=function(t,a){var n=this.dataToPoint(t),i=this.dataToPoint(a),o=this.getArea(),s=new kt(n[0],n[1],i[0]-n[0],i[1]-n[1]);return o.intersect(s)},e.prototype.dataToPoint=function(t,a,n){n=n||[];var i=t[0],o=t[1];if(this._transform&&i!=null&&isFinite(i)&&o!=null&&isFinite(o))return _r(n,t,this._transform);var s=this.getAxis("x"),l=this.getAxis("y");return n[0]=s.toGlobalCoord(s.dataToCoord(i,a)),n[1]=l.toGlobalCoord(l.dataToCoord(o,a)),n},e.prototype.clampData=function(t,a){var n=this.getAxis("x").scale,i=this.getAxis("y").scale,o=n.getExtent(),s=i.getExtent(),l=n.parse(t[0]),u=i.parse(t[1]);return a=a||[],a[0]=Math.min(Math.max(Math.min(o[0],o[1]),l),Math.max(o[0],o[1])),a[1]=Math.min(Math.max(Math.min(s[0],s[1]),u),Math.max(s[0],s[1])),a},e.prototype.pointToData=function(t,a){var n=[];if(this._invTransform)return _r(n,t,this._invTransform);var i=this.getAxis("x"),o=this.getAxis("y");return n[0]=i.coordToData(i.toLocalCoord(t[0]),a),n[1]=o.coordToData(o.toLocalCoord(t[1]),a),n},e.prototype.getOtherAxis=function(t){return this.getAxis(t.dim==="x"?"y":"x")},e.prototype.getArea=function(){var t=this.getAxis("x").getGlobalExtent(),a=this.getAxis("y").getGlobalExtent(),n=Math.min(t[0],t[1]),i=Math.min(a[0],a[1]),o=Math.max(t[0],t[1])-n,s=Math.max(a[0],a[1])-i;return new kt(n,i,o,s)},e})(VZ),HZ=(function(r){$(e,r);function e(t,a,n,i,o){var s=r.call(this,t,a,n)||this;return s.index=0,s.type=i||"value",s.position=o||"bottom",s}return e.prototype.isHorizontal=function(){var t=this.position;return t==="top"||t==="bottom"},e.prototype.getGlobalExtent=function(t){var a=this.getExtent();return a[0]=this.toGlobalCoord(a[0]),a[1]=this.toGlobalCoord(a[1]),t&&a[0]>a[1]&&a.reverse(),a},e.prototype.pointToData=function(t,a){return this.coordToData(this.toLocalCoord(t[this.dim==="x"?0:1]),a)},e.prototype.setCategorySortInfo=function(t){if(this.type!=="category")return!1;this.model.option.categorySortInfo=t,this.scale.setSortInfo(t)},e})(hn);function AS(r,e,t){t=t||{};var a=r.coordinateSystem,n=e.axis,i={},o=n.getAxesOnZeroOf()[0],s=n.position,l=o?"onZero":s,u=n.dim,f=a.getRect(),v=[f.x,f.x+f.width,f.y,f.y+f.height],d={left:0,right:1,top:0,bottom:1,onZero:2},p=e.get("offset")||0,y=u==="x"?[v[2]-p,v[3]+p]:[v[0]-p,v[1]+p];if(o){var m=o.toGlobalCoord(o.dataToCoord(0));y[d.onZero]=Math.max(Math.min(m,y[1]),y[0])}i.position=[u==="y"?y[d[l]]:v[0],u==="x"?y[d[l]]:v[3]],i.rotation=Math.PI/2*(u==="x"?0:1);var _={top:-1,bottom:1,left:-1,right:1};i.labelDirection=i.tickDirection=i.nameDirection=_[s],i.labelOffset=o?y[d[s]]-y[d.onZero]:0,e.get(["axisTick","inside"])&&(i.tickDirection=-i.tickDirection),fr(t.labelInside,e.get(["axisLabel","inside"]))&&(i.labelDirection=-i.labelDirection);var S=e.get(["axisLabel","rotate"]);return i.labelRotate=l==="top"?-S:S,i.z2=1,i}function qE(r){return r.get("coordinateSystem")==="cartesian2d"}function $E(r){var e={xAxisModel:null,yAxisModel:null};return P(e,function(t,a){var n=a.replace(/Model$/,""),i=r.getReferringComponents(n,je).models[0];e[a]=i}),e}var v_=Math.log;function K4(r,e,t){var a=bi.prototype,n=a.getTicks.call(t),i=a.getTicks.call(t,!0),o=n.length-1,s=a.getInterval.call(t),l=a4(r,e),u=l.extent,f=l.fixMin,v=l.fixMax;if(r.type==="log"){var d=v_(r.base);u=[v_(u[0])/d,v_(u[1])/d]}r.setExtent(u[0],u[1]),r.calcNiceExtent({splitNumber:o,fixMin:f,fixMax:v});var p=a.getExtent.call(r);f&&(u[0]=p[0]),v&&(u[1]=p[1]);var y=a.getInterval.call(r),m=u[0],_=u[1];if(f&&v)y=(_-m)/o;else if(f)for(_=u[0]+y*o;_u[0]&&isFinite(m)&&isFinite(u[0]);)y=J1(y),m=u[1]-y*o;else{var S=r.getTicks().length-1;S>o&&(y=J1(y));var b=y*o;_=Math.ceil(u[1]/y)*y,m=Oe(_-b),m<0&&u[0]>=0?(m=0,_=Oe(b)):_>0&&u[1]<=0&&(_=0,m=-Oe(b))}var w=(n[0].value-i[0].value)/s,A=(n[o].value-i[o].value)/s;a.setExtent.call(r,m+y*w,_+y*A),a.setInterval.call(r,y),(w||A)&&a.setNiceExtent.call(r,m+y,_-y)}var UZ=(function(){function r(e,t,a){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=TS,this._initCartesian(e,t,a),this.model=e}return r.prototype.getRect=function(){return this._rect},r.prototype.update=function(e,t){var a=this._axesMap;this._updateScale(e,this.model);function n(o){var s,l=Yt(o),u=l.length;if(u){for(var f=[],v=u-1;v>=0;v--){var d=+l[v],p=o[d],y=p.model,m=p.scale;yS(m)&&y.get("alignTicks")&&y.get("interval")==null?f.push(p):(zu(m,y),yS(m)&&(s=p))}f.length&&(s||(s=f.pop(),zu(s.scale,s.model)),P(f,function(_){K4(_.scale,_.model,s.scale)}))}}n(a.x),n(a.y);var i={};P(a.x,function(o){KE(a,"y",o,i)}),P(a.y,function(o){KE(a,"x",o,i)}),this.resize(this.model,t)},r.prototype.resize=function(e,t,a){var n=e.getBoxLayoutParams(),i=!a&&e.get("containLabel"),o=Qe(n,{width:t.getWidth(),height:t.getHeight()});this._rect=o;var s=this._axesList;l(),i&&(P(s,function(u){if(!u.model.get(["axisLabel","inside"])){var f=TY(u);if(f){var v=u.isHorizontal()?"height":"width",d=u.model.get(["axisLabel","margin"]);o[v]-=f[v]+d,u.position==="top"?o.y+=f.height+d:u.position==="left"&&(o.x+=f.width+d)}}}),l()),P(this._coordsList,function(u){u.calcAffineTransform()});function l(){P(s,function(u){var f=u.isHorizontal(),v=f?[0,o.width]:[0,o.height],d=u.inverse?1:0;u.setExtent(v[d],v[1-d]),FZ(u,f?o.x:o.y)})}},r.prototype.getAxis=function(e,t){var a=this._axesMap[e];if(a!=null)return a[t||0]},r.prototype.getAxes=function(){return this._axesList.slice()},r.prototype.getCartesian=function(e,t){if(e!=null&&t!=null){var a="x"+e+"y"+t;return this._coordsMap[a]}Tt(e)&&(t=e.yAxisIndex,e=e.xAxisIndex);for(var n=0,i=this._coordsList;n0?"top":"bottom",i="center"):eg(n-_o)?(o=a>0?"bottom":"top",i="center"):(o="middle",n>0&&n<_o?i=a>0?"right":"left":i=a>0?"left":"right"),{rotation:n,textAlign:i,textVerticalAlign:o}},r.makeAxisEventDataBase=function(e){var t={componentType:e.mainType,componentIndex:e.componentIndex};return t[e.mainType+"Index"]=e.componentIndex,t},r.isLabelSilent=function(e){var t=e.get("tooltip");return e.get("silent")||!(e.get("triggerEvent")||t&&t.show)},r})(),JE={axisLine:function(r,e,t,a){var n=e.get(["axisLine","show"]);if(n==="auto"&&r.handleAutoShown&&(n=r.handleAutoShown("axisLine")),!!n){var i=e.axis.getExtent(),o=a.transform,s=[i[0],0],l=[i[1],0],u=s[0]>l[0];o&&(_r(s,s,o),_r(l,l,o));var f=et({lineCap:"round"},e.getModel(["axisLine","lineStyle"]).getLineStyle()),v=new er({shape:{x1:s[0],y1:s[1],x2:l[0],y2:l[1]},style:f,strokeContainThreshold:r.strokeContainThreshold||5,silent:!0,z2:1});Nu(v.shape,v.style.lineWidth),v.anid="line",t.add(v);var d=e.get(["axisLine","symbol"]);if(d!=null){var p=e.get(["axisLine","symbolSize"]);vt(d)&&(d=[d,d]),(vt(p)||Qt(p))&&(p=[p,p]);var y=ll(e.get(["axisLine","symbolOffset"])||0,p),m=p[0],_=p[1];P([{rotate:r.rotation+Math.PI/2,offset:y[0],r:0},{rotate:r.rotation-Math.PI/2,offset:y[1],r:Math.sqrt((s[0]-l[0])*(s[0]-l[0])+(s[1]-l[1])*(s[1]-l[1]))}],function(S,b){if(d[b]!=="none"&&d[b]!=null){var w=Ye(d[b],-m/2,-_/2,m,_,f.stroke,!0),A=S.r+S.offset,M=u?l:s;w.attr({rotation:S.rotate,x:M[0]+A*Math.cos(r.rotation),y:M[1]-A*Math.sin(r.rotation),silent:!0,z2:11}),t.add(w)}})}}},axisTickLabel:function(r,e,t,a){var n=XZ(t,a,e,r),i=WZ(t,a,e,r);if(YZ(e,i,n),ZZ(t,a,e,r.tickDirection),e.get(["axisLabel","hideOverlap"])){var o=g4(st(i,function(s){return{label:s,priority:s.z2,defaultAttr:{ignore:s.ignore}}}));_4(o)}},axisName:function(r,e,t,a){var n=fr(r.axisName,e.get("name"));if(n){var i=e.get("nameLocation"),o=r.nameDirection,s=e.getModel("nameTextStyle"),l=e.get("nameGap")||0,u=e.axis.getExtent(),f=u[0]>u[1]?-1:1,v=[i==="start"?u[0]-f*l:i==="end"?u[1]+f*l:(u[0]+u[1])/2,eR(i)?r.labelOffset+o*l:0],d,p=e.get("nameRotate");p!=null&&(p=p*_o/180);var y;eR(i)?d=Or.innerTextLayout(r.rotation,p??r.rotation,o):(d=jZ(r.rotation,i,p||0,u),y=r.axisNameAvailableWidth,y!=null&&(y=Math.abs(y/Math.sin(d.rotation)),!isFinite(y)&&(y=null)));var m=s.getFont(),_=e.get("nameTruncate",!0)||{},S=_.ellipsis,b=fr(r.nameTruncateMaxWidth,_.maxWidth,y),w=new $t({x:v[0],y:v[1],rotation:d.rotation,silent:Or.isLabelSilent(e),style:xe(s,{text:n,font:m,overflow:"truncate",width:b,ellipsis:S,fill:s.getTextColor()||e.get(["axisLine","lineStyle","color"]),align:s.get("align")||d.textAlign,verticalAlign:s.get("verticalAlign")||d.textVerticalAlign}),z2:1});if(Wu({el:w,componentModel:e,itemName:n}),w.__fullText=n,w.anid="name",e.get("triggerEvent")){var A=Or.makeAxisEventDataBase(e);A.targetType="axisName",A.name=n,Rt(w).eventData=A}a.add(w),w.updateTransform(),t.add(w),w.decomposeTransform()}}};function jZ(r,e,t,a){var n=p3(t-r),i,o,s=a[0]>a[1],l=e==="start"&&!s||e!=="start"&&s;return eg(n-_o/2)?(o=l?"bottom":"top",i="center"):eg(n-_o*1.5)?(o=l?"top":"bottom",i="center"):(o="middle",n<_o*1.5&&n>_o/2?i=l?"left":"right":i=l?"right":"left"),{rotation:n,textAlign:i,textVerticalAlign:o}}function YZ(r,e,t){if(!n4(r.axis)){var a=r.get(["axisLabel","showMinLabel"]),n=r.get(["axisLabel","showMaxLabel"]);e=e||[],t=t||[];var i=e[0],o=e[1],s=e[e.length-1],l=e[e.length-2],u=t[0],f=t[1],v=t[t.length-1],d=t[t.length-2];a===!1?(Ma(i),Ma(u)):tR(i,o)&&(a?(Ma(o),Ma(f)):(Ma(i),Ma(u))),n===!1?(Ma(s),Ma(v)):tR(l,s)&&(n?(Ma(l),Ma(d)):(Ma(s),Ma(v)))}}function Ma(r){r&&(r.ignore=!0)}function tR(r,e){var t=r&&r.getBoundingRect().clone(),a=e&&e.getBoundingRect().clone();if(!(!t||!a)){var n=Yg([]);return sl(n,n,-r.rotation),t.applyTransform(vi([],n,r.getLocalTransform())),a.applyTransform(vi([],n,e.getLocalTransform())),t.intersect(a)}}function eR(r){return r==="middle"||r==="center"}function Q4(r,e,t,a,n){for(var i=[],o=[],s=[],l=0;l=0||r===e}function tW(r){var e=_2(r);if(e){var t=e.axisPointerModel,a=e.axis.scale,n=t.option,i=t.get("status"),o=t.get("value");o!=null&&(o=a.parse(o));var s=DS(t);i==null&&(n.status=s?"show":"hide");var l=a.getExtent().slice();l[0]>l[1]&&l.reverse(),(o==null||o>l[1])&&(o=l[1]),o0&&!y.min?y.min=0:y.min!=null&&y.min<0&&!y.max&&(y.max=0);var m=l;y.color!=null&&(m=wt({color:y.color},l));var _=zt(Dt(y),{boundaryGap:t,splitNumber:a,scale:n,axisLine:i,axisTick:o,axisLabel:s,name:y.text,showName:u,nameLocation:"end",nameGap:v,nameTextStyle:m,triggerEvent:d},!1);if(vt(f)){var S=_.name;_.name=f.replace("{value}",S??"")}else bt(f)&&(_.name=f(_.name,_));var b=new oe(_,null,this.ecModel);return Xe(b,Xh.prototype),b.mainType="radar",b.componentIndex=this.componentIndex,b},this);this._indicatorModels=p},e.prototype.getIndicatorModels=function(){return this._indicatorModels},e.type="radar",e.defaultOption={z:0,center:["50%","50%"],radius:"75%",startAngle:90,axisName:{show:!0},boundaryGap:[0,0],splitNumber:5,axisNameGap:15,scale:!1,shape:"polygon",axisLine:zt({lineStyle:{color:"#bbb"}},_f.axisLine),axisLabel:ip(_f.axisLabel,!1),axisTick:ip(_f.axisTick,!1),splitLine:ip(_f.splitLine,!0),splitArea:ip(_f.splitArea,!0),indicator:[]},e})(jt),vW=["axisLine","axisTickLabel","axisName"],dW=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){var i=this.group;i.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},e.prototype._buildAxes=function(t){var a=t.coordinateSystem,n=a.getIndicatorAxes(),i=st(n,function(o){var s=o.model.get("showName")?o.name:"",l=new Or(o.model,{axisName:s,position:[a.cx,a.cy],rotation:o.angle,labelDirection:-1,tickDirection:-1,nameDirection:1});return l});P(i,function(o){P(vW,o.add,o),this.group.add(o.getGroup())},this)},e.prototype._buildSplitLineAndArea=function(t){var a=t.coordinateSystem,n=a.getIndicatorAxes();if(!n.length)return;var i=t.get("shape"),o=t.getModel("splitLine"),s=t.getModel("splitArea"),l=o.getModel("lineStyle"),u=s.getModel("areaStyle"),f=o.get("show"),v=s.get("show"),d=l.get("color"),p=u.get("color"),y=it(d)?d:[d],m=it(p)?p:[p],_=[],S=[];function b(F,B,j){var Y=j%B.length;return F[Y]=F[Y]||[],Y}if(i==="circle")for(var w=n[0].getTicksCoords(),A=a.cx,M=a.cy,C=0;C3?1.4:o>1?1.2:1.1,f=i>0?u:1/u;g_(this,"zoom","zoomOnMouseWheel",t,{scale:f,originX:s,originY:l,isAvailableBehavior:null})}if(n){var v=Math.abs(i),d=(i>0?1:-1)*(v>3?.4:v>1?.15:.05);g_(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:d,originX:s,originY:l,isAvailableBehavior:null})}}},e.prototype._pinchHandler=function(t){if(!sR(this._zr,"globalPan")){var a=t.pinchScale>1?1.1:1/1.1;g_(this,"zoom",null,t,{scale:a,originX:t.pinchX,originY:t.pinchY,isAvailableBehavior:null})}},e})(ja);function g_(r,e,t,a,n){r.pointerChecker&&r.pointerChecker(a,n.originX,n.originY)&&(yi(a.event),nz(r,e,t,a,n))}function nz(r,e,t,a,n){n.isAvailableBehavior=dt(Bp,null,t,a),r.trigger(e,n)}function Bp(r,e,t){var a=t[r];return!r||a&&(!vt(a)||e.event[a+"Key"])}function S2(r,e,t){var a=r.target;a.x+=e,a.y+=t,a.dirty()}function b2(r,e,t,a){var n=r.target,i=r.zoomLimit,o=r.zoom=r.zoom||1;if(o*=e,i){var s=i.min||0,l=i.max||1/0;o=Math.max(Math.min(l,o),s)}var u=o/r.zoom;r.zoom=o,n.x-=(t-n.x)*(u-1),n.y-=(a-n.y)*(u-1),n.scaleX*=u,n.scaleY*=u,n.dirty()}var SW={axisPointer:1,tooltip:1,brush:1};function by(r,e,t){var a=e.getComponentByElement(r.topTarget),n=a&&a.coordinateSystem;return a&&a!==t&&!SW.hasOwnProperty(a.mainType)&&n&&n.model!==t}function iz(r){if(vt(r)){var e=new DOMParser;r=e.parseFromString(r,"text/xml")}var t=r;for(t.nodeType===9&&(t=t.firstChild);t.nodeName.toLowerCase()!=="svg"||t.nodeType!==1;)t=t.nextSibling;return t}var y_,wg={fill:"fill",stroke:"stroke","stroke-width":"lineWidth",opacity:"opacity","fill-opacity":"fillOpacity","stroke-opacity":"strokeOpacity","stroke-dasharray":"lineDash","stroke-dashoffset":"lineDashOffset","stroke-linecap":"lineCap","stroke-linejoin":"lineJoin","stroke-miterlimit":"miterLimit","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","text-anchor":"textAlign",visibility:"visibility",display:"display"},lR=Yt(wg),Tg={"alignment-baseline":"textBaseline","stop-color":"stopColor"},uR=Yt(Tg),bW=(function(){function r(){this._defs={},this._root=null}return r.prototype.parse=function(e,t){t=t||{};var a=iz(e);this._defsUsePending=[];var n=new Ct;this._root=n;var i=[],o=a.getAttribute("viewBox")||"",s=parseFloat(a.getAttribute("width")||t.width),l=parseFloat(a.getAttribute("height")||t.height);isNaN(s)&&(s=null),isNaN(l)&&(l=null),ua(a,n,null,!0,!1);for(var u=a.firstChild;u;)this._parseNode(u,n,i,null,!1,!1),u=u.nextSibling;AW(this._defs,this._defsUsePending),this._defsUsePending=[];var f,v;if(o){var d=wy(o);d.length>=4&&(f={x:parseFloat(d[0]||0),y:parseFloat(d[1]||0),width:parseFloat(d[2]),height:parseFloat(d[3])})}if(f&&s!=null&&l!=null&&(v=sz(f,{x:0,y:0,width:s,height:l}),!t.ignoreViewBox)){var p=n;n=new Ct,n.add(p),p.scaleX=p.scaleY=v.scale,p.x=v.x,p.y=v.y}return!t.ignoreRootClip&&s!=null&&l!=null&&n.setClipPath(new Wt({shape:{x:0,y:0,width:s,height:l}})),{root:n,width:s,height:l,viewBoxRect:f,viewBoxTransform:v,named:i}},r.prototype._parseNode=function(e,t,a,n,i,o){var s=e.nodeName.toLowerCase(),l,u=n;if(s==="defs"&&(i=!0),s==="text"&&(o=!0),s==="defs"||s==="switch")l=t;else{if(!i){var f=y_[s];if(f&&pt(y_,s)){l=f.call(this,e,t);var v=e.getAttribute("name");if(v){var d={name:v,namedFrom:null,svgNodeTagLower:s,el:l};a.push(d),s==="g"&&(u=d)}else n&&a.push({name:n.name,namedFrom:n,svgNodeTagLower:s,el:l});t.add(l)}}var p=cR[s];if(p&&pt(cR,s)){var y=p.call(this,e),m=e.getAttribute("id");m&&(this._defs[m]=y)}}if(l&&l.isGroup)for(var _=e.firstChild;_;)_.nodeType===1?this._parseNode(_,l,a,u,i,o):_.nodeType===3&&o&&this._parseText(_,l),_=_.nextSibling},r.prototype._parseText=function(e,t){var a=new Iu({style:{text:e.textContent},silent:!0,x:this._textX||0,y:this._textY||0});La(t,a),ua(e,a,this._defsUsePending,!1,!1),wW(a,t);var n=a.style,i=n.fontSize;i&&i<9&&(n.fontSize=9,a.scaleX*=i/9,a.scaleY*=i/9);var o=(n.fontSize||n.fontFamily)&&[n.fontStyle,n.fontWeight,(n.fontSize||12)+"px",n.fontFamily||"sans-serif"].join(" ");n.font=o;var s=a.getBoundingRect();return this._textX+=s.width,t.add(a),a},r.internalField=(function(){y_={g:function(e,t){var a=new Ct;return La(t,a),ua(e,a,this._defsUsePending,!1,!1),a},rect:function(e,t){var a=new Wt;return La(t,a),ua(e,a,this._defsUsePending,!1,!1),a.setShape({x:parseFloat(e.getAttribute("x")||"0"),y:parseFloat(e.getAttribute("y")||"0"),width:parseFloat(e.getAttribute("width")||"0"),height:parseFloat(e.getAttribute("height")||"0")}),a.silent=!0,a},circle:function(e,t){var a=new un;return La(t,a),ua(e,a,this._defsUsePending,!1,!1),a.setShape({cx:parseFloat(e.getAttribute("cx")||"0"),cy:parseFloat(e.getAttribute("cy")||"0"),r:parseFloat(e.getAttribute("r")||"0")}),a.silent=!0,a},line:function(e,t){var a=new er;return La(t,a),ua(e,a,this._defsUsePending,!1,!1),a.setShape({x1:parseFloat(e.getAttribute("x1")||"0"),y1:parseFloat(e.getAttribute("y1")||"0"),x2:parseFloat(e.getAttribute("x2")||"0"),y2:parseFloat(e.getAttribute("y2")||"0")}),a.silent=!0,a},ellipse:function(e,t){var a=new ey;return La(t,a),ua(e,a,this._defsUsePending,!1,!1),a.setShape({cx:parseFloat(e.getAttribute("cx")||"0"),cy:parseFloat(e.getAttribute("cy")||"0"),rx:parseFloat(e.getAttribute("rx")||"0"),ry:parseFloat(e.getAttribute("ry")||"0")}),a.silent=!0,a},polygon:function(e,t){var a=e.getAttribute("points"),n;a&&(n=vR(a));var i=new Vr({shape:{points:n||[]},silent:!0});return La(t,i),ua(e,i,this._defsUsePending,!1,!1),i},polyline:function(e,t){var a=e.getAttribute("points"),n;a&&(n=vR(a));var i=new Gr({shape:{points:n||[]},silent:!0});return La(t,i),ua(e,i,this._defsUsePending,!1,!1),i},image:function(e,t){var a=new hr;return La(t,a),ua(e,a,this._defsUsePending,!1,!1),a.setStyle({image:e.getAttribute("xlink:href")||e.getAttribute("href"),x:+e.getAttribute("x"),y:+e.getAttribute("y"),width:+e.getAttribute("width"),height:+e.getAttribute("height")}),a.silent=!0,a},text:function(e,t){var a=e.getAttribute("x")||"0",n=e.getAttribute("y")||"0",i=e.getAttribute("dx")||"0",o=e.getAttribute("dy")||"0";this._textX=parseFloat(a)+parseFloat(i),this._textY=parseFloat(n)+parseFloat(o);var s=new Ct;return La(t,s),ua(e,s,this._defsUsePending,!1,!0),s},tspan:function(e,t){var a=e.getAttribute("x"),n=e.getAttribute("y");a!=null&&(this._textX=parseFloat(a)),n!=null&&(this._textY=parseFloat(n));var i=e.getAttribute("dx")||"0",o=e.getAttribute("dy")||"0",s=new Ct;return La(t,s),ua(e,s,this._defsUsePending,!1,!0),this._textX+=parseFloat(i),this._textY+=parseFloat(o),s},path:function(e,t){var a=e.getAttribute("d")||"",n=K3(a);return La(t,n),ua(e,n,this._defsUsePending,!1,!1),n.silent=!0,n}}})(),r})(),cR={lineargradient:function(r){var e=parseInt(r.getAttribute("x1")||"0",10),t=parseInt(r.getAttribute("y1")||"0",10),a=parseInt(r.getAttribute("x2")||"10",10),n=parseInt(r.getAttribute("y2")||"0",10),i=new Bh(e,t,a,n);return fR(r,i),hR(r,i),i},radialgradient:function(r){var e=parseInt(r.getAttribute("cx")||"0",10),t=parseInt(r.getAttribute("cy")||"0",10),a=parseInt(r.getAttribute("r")||"0",10),n=new eP(e,t,a);return fR(r,n),hR(r,n),n}};function fR(r,e){var t=r.getAttribute("gradientUnits");t==="userSpaceOnUse"&&(e.global=!0)}function hR(r,e){for(var t=r.firstChild;t;){if(t.nodeType===1&&t.nodeName.toLocaleLowerCase()==="stop"){var a=t.getAttribute("offset"),n=void 0;a&&a.indexOf("%")>0?n=parseInt(a,10)/100:a?n=parseFloat(a):n=0;var i={};oz(t,i,i);var o=i.stopColor||t.getAttribute("stop-color")||"#000000";e.colorStops.push({offset:n,color:o})}t=t.nextSibling}}function La(r,e){r&&r.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),wt(e.__inheritedStyle,r.__inheritedStyle))}function vR(r){for(var e=wy(r),t=[],a=0;a0;i-=2){var o=a[i],s=a[i-1],l=wy(o);switch(n=n||Ua(),s){case"translate":Pn(n,n,[parseFloat(l[0]),parseFloat(l[1]||"0")]);break;case"scale":_b(n,n,[parseFloat(l[0]),parseFloat(l[1]||l[0])]);break;case"rotate":sl(n,n,-parseFloat(l[0])*m_);break;case"skewX":var u=Math.tan(parseFloat(l[0])*m_);vi(n,[1,0,u,1,0,0],n);break;case"skewY":var f=Math.tan(parseFloat(l[0])*m_);vi(n,[1,f,0,1,0,0],n);break;case"matrix":n[0]=parseFloat(l[0]),n[1]=parseFloat(l[1]),n[2]=parseFloat(l[2]),n[3]=parseFloat(l[3]),n[4]=parseFloat(l[4]),n[5]=parseFloat(l[5]);break}}e.setLocalTransform(n)}}var pR=/([^\s:;]+)\s*:\s*([^:;]+)/g;function oz(r,e,t){var a=r.getAttribute("style");if(a){pR.lastIndex=0;for(var n;(n=pR.exec(a))!=null;){var i=n[1],o=pt(wg,i)?wg[i]:null;o&&(e[o]=n[2]);var s=pt(Tg,i)?Tg[i]:null;s&&(t[s]=n[2])}}}function LW(r,e,t){for(var a=0;a0,_={api:a,geo:l,mapOrGeoModel:e,data:s,isVisualEncodedByVisualMap:m,isGeo:o,transformInfoRaw:d};l.resourceType==="geoJSON"?this._buildGeoJSON(_):l.resourceType==="geoSVG"&&this._buildSVG(_),this._updateController(e,t,a),this._updateMapSelectHandler(e,u,a,n)},r.prototype._buildGeoJSON=function(e){var t=this._regionsGroupByName=xt(),a=xt(),n=this._regionsGroup,i=e.transformInfoRaw,o=e.mapOrGeoModel,s=e.data,l=e.geo.projection,u=l&&l.stream;function f(p,y){return y&&(p=y(p)),p&&[p[0]*i.scaleX+i.x,p[1]*i.scaleY+i.y]}function v(p){for(var y=[],m=!u&&l&&l.project,_=0;_=0)&&(d=n);var p=o?{normal:{align:"center",verticalAlign:"middle"}}:null;Sr(e,nr(a),{labelFetcher:d,labelDataIndex:v,defaultText:t},p);var y=e.getTextContent();if(y&&(lz(y).ignore=y.ignore,e.textConfig&&o)){var m=e.getBoundingRect().clone();e.textConfig.layoutRect=m,e.textConfig.position=[(o[0]-m.x)/m.width*100+"%",(o[1]-m.y)/m.height*100+"%"]}e.disableLabelAnimation=!0}else e.removeTextContent(),e.removeTextConfig(),e.disableLabelAnimation=null}function xR(r,e,t,a,n,i){r.data?r.data.setItemGraphicEl(i,e):Rt(e).eventData={componentType:"geo",componentIndex:n.componentIndex,geoIndex:n.componentIndex,name:t,region:a&&a.option||{}}}function SR(r,e,t,a,n){r.data||Wu({el:e,componentModel:n,itemName:t,itemTooltipOption:a.get("tooltip")})}function bR(r,e,t,a,n){e.highDownSilentOnTouch=!!n.get("selectedMode");var i=a.getModel("emphasis"),o=i.get("focus");return Pe(e,o,i.get("blurScope"),i.get("disabled")),r.isGeo&&XH(e,n,t),o}function wR(r,e,t){var a=[],n;function i(){n=[]}function o(){n.length&&(a.push(n),n=[])}var s=e({polygonStart:i,polygonEnd:o,lineStart:i,lineEnd:o,point:function(l,u){isFinite(l)&&isFinite(u)&&n.push([l,u])},sphere:function(){}});return!t&&s.polygonStart(),P(r,function(l){s.lineStart();for(var u=0;u-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2),n},e.type="series.map",e.dependencies=["geo"],e.layoutMode="box",e.defaultOption={z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:null,showLegendSymbol:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,selectedMode:!0,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}},select:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{color:"rgba(255,215,0,0.8)"}},nameProperty:"name"},e})(Se);function qW(r,e){var t={};return P(r,function(a){a.each(a.mapDimension("value"),function(n,i){var o="ec-"+a.getName(i);t[o]=t[o]||[],isNaN(n)||t[o].push(n)})}),r[0].map(r[0].mapDimension("value"),function(a,n){for(var i="ec-"+r[0].getName(n),o=0,s=1/0,l=-1/0,u=t[i].length,f=0;f1?(A.width=w,A.height=w/_):(A.height=w,A.width=w*_),A.y=b[1]-A.height/2,A.x=b[0]-A.width/2;else{var M=r.getBoxLayoutParams();M.aspect=_,A=Qe(M,{width:y,height:m})}this.setViewRect(A.x,A.y,A.width,A.height),this.setCenter(r.get("center"),e),this.setZoom(r.get("zoom"))}function JW(r,e){P(e.get("geoCoord"),function(t,a){r.addGeoCoord(a,t)})}var tq=(function(){function r(){this.dimensions=cz}return r.prototype.create=function(e,t){var a=[];function n(o){return{nameProperty:o.get("nameProperty"),aspectScale:o.get("aspectScale"),projection:o.get("projection")}}e.eachComponent("geo",function(o,s){var l=o.get("map"),u=new LS(l+s,l,et({nameMap:o.get("nameMap")},n(o)));u.zoomLimit=o.get("scaleLimit"),a.push(u),o.coordinateSystem=u,u.model=o,u.resize=CR,u.resize(o,t)}),e.eachSeries(function(o){var s=o.get("coordinateSystem");if(s==="geo"){var l=o.get("geoIndex")||0;o.coordinateSystem=a[l]}});var i={};return e.eachSeriesByType("map",function(o){if(!o.getHostGeoModel()){var s=o.getMapType();i[s]=i[s]||[],i[s].push(o)}}),P(i,function(o,s){var l=st(o,function(f){return f.get("nameMap")}),u=new LS(s,s,et({nameMap:db(l)},n(o[0])));u.zoomLimit=fr.apply(null,st(o,function(f){return f.get("scaleLimit")})),a.push(u),u.resize=CR,u.resize(o[0],t),P(o,function(f){f.coordinateSystem=u,JW(u,f)})}),a},r.prototype.getFilledRegions=function(e,t,a,n){for(var i=(e||[]).slice(),o=xt(),s=0;s=0;o--){var s=n[o];s.hierNode={defaultAncestor:null,ancestor:s,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},t.push(s)}}function oq(r,e){var t=r.isExpand?r.children:[],a=r.parentNode.children,n=r.hierNode.i?a[r.hierNode.i-1]:null;if(t.length){uq(r);var i=(t[0].hierNode.prelim+t[t.length-1].hierNode.prelim)/2;n?(r.hierNode.prelim=n.hierNode.prelim+e(r,n),r.hierNode.modifier=r.hierNode.prelim-i):r.hierNode.prelim=i}else n&&(r.hierNode.prelim=n.hierNode.prelim+e(r,n));r.parentNode.hierNode.defaultAncestor=cq(r,n,r.parentNode.hierNode.defaultAncestor||a[0],e)}function sq(r){var e=r.hierNode.prelim+r.parentNode.hierNode.modifier;r.setLayout({x:e},!0),r.hierNode.modifier+=r.parentNode.hierNode.modifier}function LR(r){return arguments.length?r:vq}function kf(r,e){return r-=Math.PI/2,{x:e*Math.cos(r),y:e*Math.sin(r)}}function lq(r,e){return Qe(r.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function uq(r){for(var e=r.children,t=e.length,a=0,n=0;--t>=0;){var i=e[t];i.hierNode.prelim+=a,i.hierNode.modifier+=a,n+=i.hierNode.change,a+=i.hierNode.shift+n}}function cq(r,e,t,a){if(e){for(var n=r,i=r,o=i.parentNode.children[0],s=e,l=n.hierNode.modifier,u=i.hierNode.modifier,f=o.hierNode.modifier,v=s.hierNode.modifier;s=__(s),i=x_(i),s&&i;){n=__(n),o=x_(o),n.hierNode.ancestor=r;var d=s.hierNode.prelim+v-i.hierNode.prelim-u+a(s,i);d>0&&(hq(fq(s,r,t),r,d),u+=d,l+=d),v+=s.hierNode.modifier,u+=i.hierNode.modifier,l+=n.hierNode.modifier,f+=o.hierNode.modifier}s&&!__(n)&&(n.hierNode.thread=s,n.hierNode.modifier+=v-l),i&&!x_(o)&&(o.hierNode.thread=i,o.hierNode.modifier+=u-f,t=r)}return t}function __(r){var e=r.children;return e.length&&r.isExpand?e[e.length-1]:r.hierNode.thread}function x_(r){var e=r.children;return e.length&&r.isExpand?e[0]:r.hierNode.thread}function fq(r,e,t){return r.hierNode.ancestor.parentNode===e.parentNode?r.hierNode.ancestor:t}function hq(r,e,t){var a=t/(e.hierNode.i-r.hierNode.i);e.hierNode.change-=a,e.hierNode.shift+=t,e.hierNode.modifier+=t,e.hierNode.prelim+=t,r.hierNode.change+=a}function vq(r,e){return r.parentNode===e.parentNode?1:2}var dq=(function(){function r(){this.parentPoint=[],this.childPoints=[]}return r})(),pq=(function(r){$(e,r);function e(t){return r.call(this,t)||this}return e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new dq},e.prototype.buildPath=function(t,a){var n=a.childPoints,i=n.length,o=a.parentPoint,s=n[0],l=n[i-1];if(i===1){t.moveTo(o[0],o[1]),t.lineTo(s[0],s[1]);return}var u=a.orient,f=u==="TB"||u==="BT"?0:1,v=1-f,d=ft(a.forkPosition,1),p=[];p[f]=o[f],p[v]=o[v]+(l[v]-o[v])*d,t.moveTo(o[0],o[1]),t.lineTo(p[0],p[1]),t.moveTo(s[0],s[1]),p[f]=s[f],t.lineTo(p[0],p[1]),p[f]=l[f],t.lineTo(p[0],p[1]),t.lineTo(l[0],l[1]);for(var y=1;yb.x,M||(A=A-Math.PI));var L=M?"left":"right",E=s.getModel("label"),R=E.get("rotate"),N=R*(Math.PI/180),O=_.getTextContent();O&&(_.setTextConfig({position:E.get("position")||L,rotation:R==null?-A:N,origin:"center"}),O.setStyle("verticalAlign","middle"))}var k=s.get(["emphasis","focus"]),G=k==="relative"?Xp(o.getAncestorsIndices(),o.getDescendantIndices()):k==="ancestor"?o.getAncestorsIndices():k==="descendant"?o.getDescendantIndices():null;G&&(Rt(t).focus=G),yq(n,o,f,t,y,p,m,a),t.__edge&&(t.onHoverStateChange=function(H){if(H!=="blur"){var F=o.parentNode&&r.getItemGraphicEl(o.parentNode.dataIndex);F&&F.hoverState===Oh||ag(t.__edge,H)}})}function yq(r,e,t,a,n,i,o,s){var l=e.getModel(),u=r.get("edgeShape"),f=r.get("layout"),v=r.getOrient(),d=r.get(["lineStyle","curveness"]),p=r.get("edgeForkPosition"),y=l.getModel("lineStyle").getLineStyle(),m=a.__edge;if(u==="curve")e.parentNode&&e.parentNode!==t&&(m||(m=a.__edge=new kh({shape:ES(f,v,d,n,n)})),Jt(m,{shape:ES(f,v,d,i,o)},r));else if(u==="polyline"&&f==="orthogonal"&&e!==t&&e.children&&e.children.length!==0&&e.isExpand===!0){for(var _=e.children,S=[],b=0;b<_.length;b++){var w=_[b].getLayout();S.push([w.x,w.y])}m||(m=a.__edge=new pq({shape:{parentPoint:[o.x,o.y],childPoints:[[o.x,o.y]],orient:v,forkPosition:p}})),Jt(m,{shape:{parentPoint:[o.x,o.y],childPoints:S}},r)}m&&!(u==="polyline"&&!e.isExpand)&&(m.useStyle(wt({strokeNoScale:!0,fill:null},y)),xr(m,l,"lineStyle"),rl(m),s.add(m))}function IR(r,e,t,a,n){var i=e.tree.root,o=vz(i,r),s=o.source,l=o.sourceLayout,u=e.getItemGraphicEl(r.dataIndex);if(u){var f=e.getItemGraphicEl(s.dataIndex),v=f.__edge,d=u.__edge||(s.isExpand===!1||s.children.length===1?v:void 0),p=a.get("edgeShape"),y=a.get("layout"),m=a.get("orient"),_=a.get(["lineStyle","curveness"]);d&&(p==="curve"?Eo(d,{shape:ES(y,m,_,l,l),style:{opacity:0}},a,{cb:function(){t.remove(d)},removeOpt:n}):p==="polyline"&&a.get("layout")==="orthogonal"&&Eo(d,{shape:{parentPoint:[l.x,l.y],childPoints:[[l.x,l.y]]},style:{opacity:0}},a,{cb:function(){t.remove(d)},removeOpt:n}))}}function vz(r,e){for(var t=e.parentNode===r?e:e.parentNode||e,a;a=t.getLayout(),a==null;)t=t.parentNode===r?t:t.parentNode||t;return{source:t,sourceLayout:a}}function NR(r,e,t,a,n){var i=r.tree.getNodeByDataIndex(e),o=r.tree.root,s=vz(o,i).sourceLayout,l={duration:n.get("animationDurationUpdate"),easing:n.get("animationEasingUpdate")};Eo(t,{x:s.x+1,y:s.y+1},n,{cb:function(){a.remove(t),r.setItemGraphicEl(e,null)},removeOpt:l}),t.fadeOut(null,r.hostModel,{fadeLabel:!0,animation:l}),i.children.forEach(function(u){IR(u,r,a,n,l)}),IR(i,r,a,n,l)}function ES(r,e,t,a,n){var i,o,s,l,u,f,v,d;if(r==="radial"){u=a.rawX,v=a.rawY,f=n.rawX,d=n.rawY;var p=kf(u,v),y=kf(u,v+(d-v)*t),m=kf(f,d+(v-d)*t),_=kf(f,d);return{x1:p.x||0,y1:p.y||0,x2:_.x||0,y2:_.y||0,cpx1:y.x||0,cpy1:y.y||0,cpx2:m.x||0,cpy2:m.y||0}}else u=a.x,v=a.y,f=n.x,d=n.y,(e==="LR"||e==="RL")&&(i=u+(f-u)*t,o=v,s=f+(u-f)*t,l=d),(e==="TB"||e==="BT")&&(i=u,o=v+(d-v)*t,s=f,l=d+(v-d)*t);return{x1:u,y1:v,x2:f,y2:d,cpx1:i,cpy1:o,cpx2:s,cpy2:l}}var Ha=Kt();function dz(r){var e=r.mainData,t=r.datas;t||(t={main:e},r.datasAttr={main:"data"}),r.datas=r.mainData=null,pz(e,t,r),P(t,function(a){P(e.TRANSFERABLE_METHODS,function(n){a.wrapMethod(n,It(mq,r))})}),e.wrapMethod("cloneShallow",It(xq,r)),P(e.CHANGABLE_METHODS,function(a){e.wrapMethod(a,It(_q,r))}),zr(t[e.dataType]===e)}function mq(r,e){if(wq(this)){var t=et({},Ha(this).datas);t[this.dataType]=e,pz(e,t,r)}else A2(e,this.dataType,Ha(this).mainData,r);return e}function _q(r,e){return r.struct&&r.struct.update(),e}function xq(r,e){return P(Ha(e).datas,function(t,a){t!==e&&A2(t.cloneShallow(),a,e,r)}),e}function Sq(r){var e=Ha(this).mainData;return r==null||e==null?e:Ha(e).datas[r]}function bq(){var r=Ha(this).mainData;return r==null?[{data:r}]:st(Yt(Ha(r).datas),function(e){return{type:e,data:Ha(r).datas[e]}})}function wq(r){return Ha(r).mainData===r}function pz(r,e,t){Ha(r).datas={},P(e,function(a,n){A2(a,n,r,t)})}function A2(r,e,t,a){Ha(t).datas[e]=r,Ha(r).mainData=t,r.dataType=e,a.struct&&(r[a.structAttr]=a.struct,a.struct[a.datasAttr[e]]=r),r.getLinkedData=Sq,r.getLinkedDataAll=bq}var Tq=(function(){function r(e,t){this.depth=0,this.height=0,this.dataIndex=-1,this.children=[],this.viewChildren=[],this.isExpand=!1,this.name=e||"",this.hostTree=t}return r.prototype.isRemoved=function(){return this.dataIndex<0},r.prototype.eachNode=function(e,t,a){bt(e)&&(a=t,t=e,e=null),e=e||{},vt(e)&&(e={order:e});var n=e.order||"preorder",i=this[e.attr||"children"],o;n==="preorder"&&(o=t.call(a,this));for(var s=0;!o&&st&&(t=n.height)}this.height=t+1},r.prototype.getNodeById=function(e){if(this.getId()===e)return this;for(var t=0,a=this.children,n=a.length;t=0&&this.hostTree.data.setItemLayout(this.dataIndex,e,t)},r.prototype.getLayout=function(){return this.hostTree.data.getItemLayout(this.dataIndex)},r.prototype.getModel=function(e){if(!(this.dataIndex<0)){var t=this.hostTree,a=t.data.getItemModel(this.dataIndex);return a.getModel(e)}},r.prototype.getLevelModel=function(){return(this.hostTree.levelModels||[])[this.depth]},r.prototype.setVisual=function(e,t){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,e,t)},r.prototype.getVisual=function(e){return this.hostTree.data.getItemVisual(this.dataIndex,e)},r.prototype.getRawIndex=function(){return this.hostTree.data.getRawIndex(this.dataIndex)},r.prototype.getId=function(){return this.hostTree.data.getId(this.dataIndex)},r.prototype.getChildIndex=function(){if(this.parentNode){for(var e=this.parentNode.children,t=0;t=0){var a=t.getData().tree.root,n=r.targetNode;if(vt(n)&&(n=a.getNodeById(n)),n&&a.contains(n))return{node:n};var i=r.targetNodeId;if(i!=null&&(n=a.getNodeById(i)))return{node:n}}}function gz(r){for(var e=[];r;)r=r.parentNode,r&&e.push(r);return e.reverse()}function C2(r,e){var t=gz(r);return Vt(t,e)>=0}function Ty(r,e){for(var t=[];r;){var a=r.dataIndex;t.push({name:r.name,dataIndex:a,value:e.getRawValue(a)}),r=r.parentNode}return t.reverse(),t}var Dq=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.hasSymbolVisual=!0,t.ignoreStyleOnData=!0,t}return e.prototype.getInitialData=function(t){var a={name:t.name,children:t.data},n=t.leaves||{},i=new oe(n,this,this.ecModel),o=D2.createTree(a,this,s);function s(v){v.wrapMethod("getItemModel",function(d,p){var y=o.getNodeByDataIndex(p);return y&&y.children.length&&y.isExpand||(d.parentModel=i),d})}var l=0;o.eachNode("preorder",function(v){v.depth>l&&(l=v.depth)});var u=t.expandAndCollapse,f=u&&t.initialTreeDepth>=0?t.initialTreeDepth:l;return o.root.eachNode("preorder",function(v){var d=v.hostTree.data.getRawDataItem(v.dataIndex);v.isExpand=d&&d.collapsed!=null?!d.collapsed:v.depth<=f}),o.data},e.prototype.getOrient=function(){var t=this.get("orient");return t==="horizontal"?t="LR":t==="vertical"&&(t="TB"),t},e.prototype.setZoom=function(t){this.option.zoom=t},e.prototype.setCenter=function(t){this.option.center=t},e.prototype.formatTooltip=function(t,a,n){for(var i=this.getData().tree,o=i.root.children[0],s=i.getNodeByDataIndex(t),l=s.getValue(),u=s.name;s&&s!==o;)u=s.parentNode.name+"."+u,s=s.parentNode;return ir("nameValue",{name:u,value:l,noValue:isNaN(l)||l==null})},e.prototype.getDataParams=function(t){var a=r.prototype.getDataParams.apply(this,arguments),n=this.getData().tree.getNodeByDataIndex(t);return a.treeAncestors=Ty(n,this),a.collapsed=!n.isExpand,a},e.type="series.tree",e.layoutMode="box",e.defaultOption={z:2,coordinateSystem:"view",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",edgeShape:"curve",edgeForkPosition:"50%",roam:!1,nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:"#ccc",width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderWidth:1.5},label:{show:!0},animationEasing:"linear",animationDuration:700,animationDurationUpdate:500},e})(Se);function Cq(r,e,t){for(var a=[r],n=[],i;i=a.pop();)if(n.push(i),i.isExpand){var o=i.children;if(o.length)for(var s=0;s=0;i--)t.push(n[i])}}function Mq(r,e){r.eachSeriesByType("tree",function(t){Lq(t,e)})}function Lq(r,e){var t=lq(r,e);r.layoutInfo=t;var a=r.get("layout"),n=0,i=0,o=null;a==="radial"?(n=2*Math.PI,i=Math.min(t.height,t.width)/2,o=LR(function(w,A){return(w.parentNode===A.parentNode?1:2)/w.depth})):(n=t.width,i=t.height,o=LR());var s=r.getData().tree.root,l=s.children[0];if(l){iq(s),Cq(l,oq,o),s.hierNode.modifier=-l.hierNode.prelim,Sf(l,sq);var u=l,f=l,v=l;Sf(l,function(w){var A=w.getLayout().x;Af.getLayout().x&&(f=w),w.depth>v.depth&&(v=w)});var d=u===f?1:o(u,f)/2,p=d-u.getLayout().x,y=0,m=0,_=0,S=0;if(a==="radial")y=n/(f.getLayout().x+d+p),m=i/(v.depth-1||1),Sf(l,function(w){_=(w.getLayout().x+p)*y,S=(w.depth-1)*m;var A=kf(_,S);w.setLayout({x:A.x,y:A.y,rawX:_,rawY:S},!0)});else{var b=r.getOrient();b==="RL"||b==="LR"?(m=i/(f.getLayout().x+d+p),y=n/(v.depth-1||1),Sf(l,function(w){S=(w.getLayout().x+p)*m,_=b==="LR"?(w.depth-1)*y:n-(w.depth-1)*y,w.setLayout({x:_,y:S},!0)})):(b==="TB"||b==="BT")&&(y=n/(f.getLayout().x+d+p),m=i/(v.depth-1||1),Sf(l,function(w){_=(w.getLayout().x+p)*y,S=b==="TB"?(w.depth-1)*m:i-(w.depth-1)*m,w.setLayout({x:_,y:S},!0)}))}}}function Eq(r){r.eachSeriesByType("tree",function(e){var t=e.getData(),a=t.tree;a.eachNode(function(n){var i=n.getModel(),o=i.getModel("itemStyle").getItemStyle(),s=t.ensureUniqueItemVisual(n.dataIndex,"style");et(s,o)})})}function Rq(r){r.registerAction({type:"treeExpandAndCollapse",event:"treeExpandAndCollapse",update:"update"},function(e,t){t.eachComponent({mainType:"series",subType:"tree",query:e},function(a){var n=e.dataIndex,i=a.getData().tree,o=i.getNodeByDataIndex(n);o.isExpand=!o.isExpand})}),r.registerAction({type:"treeRoam",event:"treeRoam",update:"none"},function(e,t,a){t.eachComponent({mainType:"series",subType:"tree",query:e},function(n){var i=n.coordinateSystem,o=T2(i,e,void 0,a);n.setCenter&&n.setCenter(o.center),n.setZoom&&n.setZoom(o.zoom)})})}function Iq(r){r.registerChartView(gq),r.registerSeriesModel(Dq),r.registerLayout(Mq),r.registerVisual(Eq),Rq(r)}var PR=["treemapZoomToNode","treemapRender","treemapMove"];function Nq(r){for(var e=0;e1;)i=i.parentNode;var o=nS(r.ecModel,i.name||i.dataIndex+"",a);n.setVisual("decal",o)})}var Pq=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.preventUsingHoverLayer=!0,t}return e.prototype.getInitialData=function(t,a){var n={name:t.name,children:t.data};mz(n);var i=t.levels||[],o=this.designatedVisualItemStyle={},s=new oe({itemStyle:o},this,a);i=t.levels=Oq(i,a);var l=st(i||[],function(v){return new oe(v,s,a)},this),u=D2.createTree(n,this,f);function f(v){v.wrapMethod("getItemModel",function(d,p){var y=u.getNodeByDataIndex(p),m=y?l[y.depth]:null;return d.parentModel=m||s,d})}return u.data},e.prototype.optionUpdated=function(){this.resetViewRoot()},e.prototype.formatTooltip=function(t,a,n){var i=this.getData(),o=this.getRawValue(t),s=i.getName(t);return ir("nameValue",{name:s,value:o})},e.prototype.getDataParams=function(t){var a=r.prototype.getDataParams.apply(this,arguments),n=this.getData().tree.getNodeByDataIndex(t);return a.treeAncestors=Ty(n,this),a.treePathInfo=a.treeAncestors,a},e.prototype.setLayoutInfo=function(t){this.layoutInfo=this.layoutInfo||{},et(this.layoutInfo,t)},e.prototype.mapIdToIndex=function(t){var a=this._idIndexMap;a||(a=this._idIndexMap=xt(),this._idIndexMapCount=0);var n=a.get(t);return n==null&&a.set(t,n=this._idIndexMapCount++),n},e.prototype.getViewRoot=function(){return this._viewRoot},e.prototype.resetViewRoot=function(t){t?this._viewRoot=t:t=this._viewRoot;var a=this.getRawData().tree.root;(!t||t!==a&&!a.contains(t))&&(this._viewRoot=a)},e.prototype.enableAriaDecal=function(){yz(this)},e.type="series.treemap",e.layoutMode="box",e.defaultOption={progressive:0,left:"center",top:"middle",width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.32*.32,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",textStyle:{color:"#fff"}},emphasis:{itemStyle:{color:"rgba(0,0,0,0.9)"}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",overflow:"truncate"},upperLabel:{show:!1,position:[0,"50%"],height:20,overflow:"truncate",verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],overflow:"truncate",verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},e})(Se);function mz(r){var e=0;P(r.children,function(a){mz(a);var n=a.value;it(n)&&(n=n[0]),e+=n});var t=r.value;it(t)&&(t=t[0]),(t==null||isNaN(t))&&(t=e),t<0&&(t=0),it(r.value)?r.value[0]=t:r.value=t}function Oq(r,e){var t=he(e.get("color")),a=he(e.get(["aria","decal","decals"]));if(t){r=r||[];var n,i;P(r,function(s){var l=new oe(s),u=l.get("color"),f=l.get("decal");(l.get(["itemStyle","color"])||u&&u!=="none")&&(n=!0),(l.get(["itemStyle","decal"])||f&&f!=="none")&&(i=!0)});var o=r[0]||(r[0]={});return n||(o.color=t.slice()),!i&&a&&(o.decal=a.slice()),r}}var zq=8,OR=8,S_=5,kq=(function(){function r(e){this.group=new Ct,e.add(this.group)}return r.prototype.render=function(e,t,a,n){var i=e.getModel("breadcrumb"),o=this.group;if(o.removeAll(),!(!i.get("show")||!a)){var s=i.getModel("itemStyle"),l=i.getModel("emphasis"),u=s.getModel("textStyle"),f=l.getModel(["itemStyle","textStyle"]),v={pos:{left:i.get("left"),right:i.get("right"),top:i.get("top"),bottom:i.get("bottom")},box:{width:t.getWidth(),height:t.getHeight()},emptyItemWidth:i.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(a,v,u),this._renderContent(e,v,s,l,u,f,n),fy(o,v.pos,v.box)}},r.prototype._prepare=function(e,t,a){for(var n=e;n;n=n.parentNode){var i=Ke(n.getModel().get("name"),""),o=a.getTextRect(i),s=Math.max(o.width+zq*2,t.emptyItemWidth);t.totalWidth+=s+OR,t.renderList.push({node:n,text:i,width:s})}},r.prototype._renderContent=function(e,t,a,n,i,o,s){for(var l=0,u=t.emptyItemWidth,f=e.get(["breadcrumb","height"]),v=W9(t.pos,t.box),d=t.totalWidth,p=t.renderList,y=n.getModel("itemStyle").getItemStyle(),m=p.length-1;m>=0;m--){var _=p[m],S=_.node,b=_.width,w=_.text;d>v.width&&(d-=b-u,b=u,w=null);var A=new Vr({shape:{points:Bq(l,0,b,f,m===p.length-1,m===0)},style:wt(a.getItemStyle(),{lineJoin:"bevel"}),textContent:new $t({style:xe(i,{text:w})}),textConfig:{position:"inside"},z2:Xu*1e4,onclick:It(s,S)});A.disableLabelAnimation=!0,A.getTextContent().ensureState("emphasis").style=xe(o,{text:w}),A.ensureState("emphasis").style=y,Pe(A,n.get("focus"),n.get("blurScope"),n.get("disabled")),this.group.add(A),Vq(A,e,S),l+=b+OR}},r.prototype.remove=function(){this.group.removeAll()},r})();function Bq(r,e,t,a,n,i){var o=[[n?r:r-S_,e],[r+t,e],[r+t,e+a],[n?r:r-S_,e+a]];return!i&&o.splice(2,0,[r+t+S_,e+a/2]),!n&&o.push([r,e+a/2]),o}function Vq(r,e,t){Rt(r).eventData={componentType:"series",componentSubType:"treemap",componentIndex:e.componentIndex,seriesIndex:e.seriesIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:t&&t.dataIndex,name:t&&t.name},treePathInfo:t&&Ty(t,e)}}var Gq=(function(){function r(){this._storage=[],this._elExistsMap={}}return r.prototype.add=function(e,t,a,n,i){return this._elExistsMap[e.id]?!1:(this._elExistsMap[e.id]=!0,this._storage.push({el:e,target:t,duration:a,delay:n,easing:i}),!0)},r.prototype.finished=function(e){return this._finishedCallback=e,this},r.prototype.start=function(){for(var e=this,t=this._storage.length,a=function(){t--,t<=0&&(e._storage.length=0,e._elExistsMap={},e._finishedCallback&&e._finishedCallback())},n=0,i=this._storage.length;nkR||Math.abs(t.dy)>kR)){var a=this.seriesModel.getData().tree.root;if(!a)return;var n=a.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t.dx,y:n.y+t.dy,width:n.width,height:n.height}})}},e.prototype._onZoom=function(t){var a=t.originX,n=t.originY;if(this._state!=="animating"){var i=this.seriesModel.getData().tree.root;if(!i)return;var o=i.getLayout();if(!o)return;var s=new kt(o.x,o.y,o.width,o.height),l=this.seriesModel.layoutInfo;a-=l.x,n-=l.y;var u=Ua();Pn(u,u,[-a,-n]),_b(u,u,[t.scale,t.scale]),Pn(u,u,[a,n]),s.applyTransform(u),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:s.x,y:s.y,width:s.width,height:s.height}})}},e.prototype._initEvents=function(t){var a=this;t.on("click",function(n){if(a._state==="ready"){var i=a.seriesModel.get("nodeClick",!0);if(i){var o=a.findTarget(n.offsetX,n.offsetY);if(o){var s=o.node;if(s.getLayout().isLeafRoot)a._rootToNode(o);else if(i==="zoomToNode")a._zoomToNode(o);else if(i==="link"){var l=s.hostTree.data.getItemModel(s.dataIndex),u=l.get("link",!0),f=l.get("target",!0)||"blank";u&&ug(u,f)}}}}},this)},e.prototype._renderBreadcrumb=function(t,a,n){var i=this;n||(n=t.get("leafDepth",!0)!=null?{node:t.getViewRoot()}:this.findTarget(a.getWidth()/2,a.getHeight()/2),n||(n={node:t.getData().tree.root})),(this._breadcrumb||(this._breadcrumb=new kq(this.group))).render(t,a,n.node,function(o){i._state!=="animating"&&(C2(t.getViewRoot(),o)?i._rootToNode({node:o}):i._zoomToNode({node:o}))})},e.prototype.remove=function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage=bf(),this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},e.prototype.dispose=function(){this._clearController()},e.prototype._zoomToNode=function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype._rootToNode=function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype.findTarget=function(t,a){var n,i=this.seriesModel.getViewRoot();return i.eachNode({attr:"viewChildren",order:"preorder"},function(o){var s=this._storage.background[o.getRawIndex()];if(s){var l=s.transformCoordToLocal(t,a),u=s.shape;if(u.x<=l[0]&&l[0]<=u.x+u.width&&u.y<=l[1]&&l[1]<=u.y+u.height)n={node:o,offsetX:l[0],offsetY:l[1]};else return!1}},this),n},e.type="treemap",e})(de);function bf(){return{nodeGroup:[],background:[],content:[]}}function Xq(r,e,t,a,n,i,o,s,l,u){if(!o)return;var f=o.getLayout(),v=r.getData(),d=o.getModel();if(v.setItemGraphicEl(o.dataIndex,null),!f||!f.isInView)return;var p=f.width,y=f.height,m=f.borderWidth,_=f.invisible,S=o.getRawIndex(),b=s&&s.getRawIndex(),w=o.viewChildren,A=f.upperHeight,M=w&&w.length,C=d.getModel("itemStyle"),L=d.getModel(["emphasis","itemStyle"]),E=d.getModel(["blur","itemStyle"]),R=d.getModel(["select","itemStyle"]),N=C.get("borderRadius")||0,O=ot("nodeGroup",RS);if(!O)return;if(l.add(O),O.x=f.x||0,O.y=f.y||0,O.markRedraw(),Ag(O).nodeWidth=p,Ag(O).nodeHeight=y,f.isAboveViewRoot)return O;var k=ot("background",zR,u,Fq);k&&K(O,k,M&&f.upperLabelHeight);var G=d.getModel("emphasis"),H=G.get("focus"),F=G.get("blurScope"),B=G.get("disabled"),j=H==="ancestor"?o.getAncestorsIndices():H==="descendant"?o.getDescendantIndices():H;if(M)ch(O)&&ks(O,!1),k&&(ks(k,!B),v.setItemGraphicEl(o.dataIndex,k),$x(k,j,F));else{var Y=ot("content",zR,u,jq);Y&&nt(O,Y),k.disableMorphing=!0,k&&ch(k)&&ks(k,!1),ks(O,!B),v.setItemGraphicEl(o.dataIndex,O),$x(O,j,F)}return O;function K(mt,yt,St){var Lt=Rt(yt);if(Lt.dataIndex=o.dataIndex,Lt.seriesIndex=r.seriesIndex,yt.setShape({x:0,y:0,width:p,height:y,r:N}),_)U(yt);else{yt.invisible=!1;var _t=o.getVisual("style"),Et=_t.stroke,ge=GR(C);ge.fill=Et;var Gt=Cs(L);Gt.fill=L.get("borderColor");var Ce=Cs(E);Ce.fill=E.get("borderColor");var be=Cs(R);if(be.fill=R.get("borderColor"),St){var or=p-2*m;W(yt,Et,_t.opacity,{x:m,y:0,width:or,height:A})}else yt.removeTextContent();yt.setStyle(ge),yt.ensureState("emphasis").style=Gt,yt.ensureState("blur").style=Ce,yt.ensureState("select").style=be,rl(yt)}mt.add(yt)}function nt(mt,yt){var St=Rt(yt);St.dataIndex=o.dataIndex,St.seriesIndex=r.seriesIndex;var Lt=Math.max(p-2*m,0),_t=Math.max(y-2*m,0);if(yt.culling=!0,yt.setShape({x:m,y:m,width:Lt,height:_t,r:N}),_)U(yt);else{yt.invisible=!1;var Et=o.getVisual("style"),ge=Et.fill,Gt=GR(C);Gt.fill=ge,Gt.decal=Et.decal;var Ce=Cs(L),be=Cs(E),or=Cs(R);W(yt,ge,Et.opacity,null),yt.setStyle(Gt),yt.ensureState("emphasis").style=Ce,yt.ensureState("blur").style=be,yt.ensureState("select").style=or,rl(yt)}mt.add(yt)}function U(mt){!mt.invisible&&i.push(mt)}function W(mt,yt,St,Lt){var _t=d.getModel(Lt?VR:BR),Et=Ke(d.get("name"),null),ge=_t.getShallow("show");Sr(mt,nr(d,Lt?VR:BR),{defaultText:ge?Et:null,inheritColor:yt,defaultOpacity:St,labelFetcher:r,labelDataIndex:o.dataIndex});var Gt=mt.getTextContent();if(Gt){var Ce=Gt.style,be=gb(Ce.padding||0);Lt&&(mt.setTextConfig({layoutRect:Lt}),Gt.disableLabelLayout=!0),Gt.beforeUpdate=function(){var pa=Math.max((Lt?Lt.width:mt.shape.width)-be[1]-be[3],0),sr=Math.max((Lt?Lt.height:mt.shape.height)-be[0]-be[2],0);(Ce.width!==pa||Ce.height!==sr)&&Gt.setStyle({width:pa,height:sr})},Ce.truncateMinChar=2,Ce.lineOverflow="truncate",rt(Ce,Lt,f);var or=Gt.getState("emphasis");rt(or?or.style:null,Lt,f)}}function rt(mt,yt,St){var Lt=mt?mt.text:null;if(!yt&&St.isLeafRoot&&Lt!=null){var _t=r.get("drillDownIcon",!0);mt.text=_t?_t+" "+Lt:Lt}}function ot(mt,yt,St,Lt){var _t=b!=null&&t[mt][b],Et=n[mt];return _t?(t[mt][b]=null,ht(Et,_t)):_||(_t=new yt,_t instanceof Fa&&(_t.z2=Zq(St,Lt)),gt(Et,_t)),e[mt][S]=_t}function ht(mt,yt){var St=mt[S]={};yt instanceof RS?(St.oldX=yt.x,St.oldY=yt.y):St.oldShape=et({},yt.shape)}function gt(mt,yt){var St=mt[S]={},Lt=o.parentNode,_t=yt instanceof Ct;if(Lt&&(!a||a.direction==="drillDown")){var Et=0,ge=0,Gt=n.background[Lt.getRawIndex()];!a&&Gt&&Gt.oldShape&&(Et=Gt.oldShape.width,ge=Gt.oldShape.height),_t?(St.oldX=0,St.oldY=ge):St.oldShape={x:Et,y:ge,width:0,height:0}}St.fadein=!_t}}function Zq(r,e){return r*Uq+e}var Ah=P,Wq=Tt,Dg=-1,ar=(function(){function r(e){var t=e.mappingMethod,a=e.type,n=this.option=Dt(e);this.type=a,this.mappingMethod=t,this._normalizeData=Kq[t];var i=r.visualHandlers[a];this.applyVisual=i.applyVisual,this.getColorMapper=i.getColorMapper,this._normalizedToVisual=i._normalizedToVisual[t],t==="piecewise"?(b_(n),qq(n)):t==="category"?n.categories?$q(n):b_(n,!0):(zr(t!=="linear"||n.dataExtent),b_(n))}return r.prototype.mapValueToVisual=function(e){var t=this._normalizeData(e);return this._normalizedToVisual(t,e)},r.prototype.getNormalizer=function(){return dt(this._normalizeData,this)},r.listVisualTypes=function(){return Yt(r.visualHandlers)},r.isValidType=function(e){return r.visualHandlers.hasOwnProperty(e)},r.eachVisual=function(e,t,a){Tt(e)?P(e,t,a):t.call(a,e)},r.mapVisual=function(e,t,a){var n,i=it(e)?[]:Tt(e)?{}:(n=!0,null);return r.eachVisual(e,function(o,s){var l=t.call(a,o,s);n?i=l:i[s]=l}),i},r.retrieveVisuals=function(e){var t={},a;return e&&Ah(r.visualHandlers,function(n,i){e.hasOwnProperty(i)&&(t[i]=e[i],a=!0)}),a?t:null},r.prepareVisualTypes=function(e){if(it(e))e=e.slice();else if(Wq(e)){var t=[];Ah(e,function(a,n){t.push(n)}),e=t}else return[];return e.sort(function(a,n){return n==="color"&&a!=="color"&&a.indexOf("color")===0?1:-1}),e},r.dependsOn=function(e,t){return t==="color"?!!(e&&e.indexOf(t)===0):e===t},r.findPieceIndex=function(e,t,a){for(var n,i=1/0,o=0,s=t.length;o=0;i--)a[i]==null&&(delete t[e[i]],e.pop())}function b_(r,e){var t=r.visual,a=[];Tt(t)?Ah(t,function(i){a.push(i)}):t!=null&&a.push(t);var n={color:1,symbol:1};!e&&a.length===1&&!n.hasOwnProperty(r.type)&&(a[1]=a[0]),_z(r,a)}function sp(r){return{applyVisual:function(e,t,a){var n=this.mapValueToVisual(e);a("color",r(t("color"),n))},_normalizedToVisual:IS([0,1])}}function HR(r){var e=this.option.visual;return e[Math.round(se(r,[0,1],[0,e.length-1],!0))]||{}}function wf(r){return function(e,t,a){a(r,this.mapValueToVisual(e))}}function Bf(r){var e=this.option.visual;return e[this.option.loop&&r!==Dg?r%e.length:r]}function Ms(){return this.option.visual[0]}function IS(r){return{linear:function(e){return se(e,r,this.option.visual,!0)},category:Bf,piecewise:function(e,t){var a=NS.call(this,t);return a==null&&(a=se(e,r,this.option.visual,!0)),a},fixed:Ms}}function NS(r){var e=this.option,t=e.pieceList;if(e.hasSpecialVisual){var a=ar.findPieceIndex(r,t),n=t[a];if(n&&n.visual)return n.visual[this.type]}}function _z(r,e){return r.visual=e,r.type==="color"&&(r.parsedVisual=st(e,function(t){var a=ha(t);return a||[0,0,0,1]})),e}var Kq={linear:function(r){return se(r,this.option.dataExtent,[0,1],!0)},piecewise:function(r){var e=this.option.pieceList,t=ar.findPieceIndex(r,e,!0);if(t!=null)return se(t,[0,e.length-1],[0,1],!0)},category:function(r){var e=this.option.categories?this.option.categoryMap[r]:r;return e??Dg},fixed:Ge};function lp(r,e,t){return r?e<=t:e=t.length||m===t[m.depth]){var S=a$(n,l,m,_,y,a);Sz(m,S,t,a)}})}}}function t$(r,e,t){var a=et({},e),n=t.designatedVisualItemStyle;return P(["color","colorAlpha","colorSaturation"],function(i){n[i]=e[i];var o=r.get(i);n[i]=null,o!=null&&(a[i]=o)}),a}function UR(r){var e=w_(r,"color");if(e){var t=w_(r,"colorAlpha"),a=w_(r,"colorSaturation");return a&&(e=Ff(e,null,null,a)),t&&(e=$p(e,t)),e}}function e$(r,e){return e!=null?Ff(e,null,null,r):null}function w_(r,e){var t=r[e];if(t!=null&&t!=="none")return t}function r$(r,e,t,a,n,i){if(!(!i||!i.length)){var o=T_(e,"color")||n.color!=null&&n.color!=="none"&&(T_(e,"colorAlpha")||T_(e,"colorSaturation"));if(o){var s=e.get("visualMin"),l=e.get("visualMax"),u=t.dataExtent.slice();s!=null&&su[1]&&(u[1]=l);var f=e.get("colorMappingBy"),v={type:o.name,dataExtent:u,visual:o.range};v.type==="color"&&(f==="index"||f==="id")?(v.mappingMethod="category",v.loop=!0):v.mappingMethod="linear";var d=new ar(v);return xz(d).drColorMappingBy=f,d}}}function T_(r,e){var t=r.get(e);return it(t)&&t.length?{name:e,range:t}:null}function a$(r,e,t,a,n,i){var o=et({},e);if(n){var s=n.type,l=s==="color"&&xz(n).drColorMappingBy,u=l==="index"?a:l==="id"?i.mapIdToIndex(t.getId()):t.getValue(r.get("visualDimension"));o[s]=n.mapValueToVisual(u)}return o}var Dh=Math.max,Cg=Math.min,FR=fr,M2=P,bz=["itemStyle","borderWidth"],n$=["itemStyle","gapWidth"],i$=["upperLabel","show"],o$=["upperLabel","height"];const s$={seriesType:"treemap",reset:function(r,e,t,a){var n=t.getWidth(),i=t.getHeight(),o=r.option,s=Qe(r.getBoxLayoutParams(),{width:t.getWidth(),height:t.getHeight()}),l=o.size||[],u=ft(FR(s.width,l[0]),n),f=ft(FR(s.height,l[1]),i),v=a&&a.type,d=["treemapZoomToNode","treemapRootToNode"],p=Th(a,d,r),y=v==="treemapRender"||v==="treemapMove"?a.rootRect:null,m=r.getViewRoot(),_=gz(m);if(v!=="treemapMove"){var S=v==="treemapZoomToNode"?v$(r,p,m,u,f):y?[y.width,y.height]:[u,f],b=o.sort;b&&b!=="asc"&&b!=="desc"&&(b="desc");var w={squareRatio:o.squareRatio,sort:b,leafDepth:o.leafDepth};m.hostTree.clearLayouts();var A={x:0,y:0,width:S[0],height:S[1],area:S[0]*S[1]};m.setLayout(A),wz(m,w,!1,0),A=m.getLayout(),M2(_,function(C,L){var E=(_[L+1]||m).getValue();C.setLayout(et({dataExtent:[E,E],borderWidth:0,upperHeight:0},A))})}var M=r.getData().tree.root;M.setLayout(d$(s,y,p),!0),r.setLayoutInfo(s),Tz(M,new kt(-s.x,-s.y,n,i),_,m,0)}};function wz(r,e,t,a){var n,i;if(!r.isRemoved()){var o=r.getLayout();n=o.width,i=o.height;var s=r.getModel(),l=s.get(bz),u=s.get(n$)/2,f=Az(s),v=Math.max(l,f),d=l-u,p=v-u;r.setLayout({borderWidth:l,upperHeight:v,upperLabelHeight:f},!0),n=Dh(n-2*d,0),i=Dh(i-d-p,0);var y=n*i,m=l$(r,s,y,e,t,a);if(m.length){var _={x:d,y:p,width:n,height:i},S=Cg(n,i),b=1/0,w=[];w.area=0;for(var A=0,M=m.length;A=0;l--){var u=n[a==="asc"?o-l-1:l].getValue();u/t*es[1]&&(s[1]=u)})),{sum:a,dataExtent:s}}function h$(r,e,t){for(var a=0,n=1/0,i=0,o=void 0,s=r.length;ia&&(a=o));var l=r.area*r.area,u=e*e*t;return l?Dh(u*a/l,l/(u*n)):1/0}function jR(r,e,t,a,n){var i=e===t.width?0:1,o=1-i,s=["x","y"],l=["width","height"],u=t[s[i]],f=e?r.area/e:0;(n||f>t[l[o]])&&(f=t[l[o]]);for(var v=0,d=r.length;vrM&&(u=rM),i=s}ua&&(a=e);var i=a%2?a+2:a+3;n=[];for(var o=0;o0&&(M[0]=-M[0],M[1]=-M[1]);var L=A[0]<0?-1:1;if(i.__position!=="start"&&i.__position!=="end"){var E=-Math.atan2(A[1],A[0]);v[0].8?"left":d[0]<-.8?"right":"center",m=d[1]>.8?"top":d[1]<-.8?"bottom":"middle";break;case"start":i.x=-d[0]*S+f[0],i.y=-d[1]*b+f[1],y=d[0]>.8?"right":d[0]<-.8?"left":"center",m=d[1]>.8?"bottom":d[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":i.x=S*L+f[0],i.y=f[1]+R,y=A[0]<0?"right":"left",i.originX=-S*L,i.originY=-R;break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":i.x=C[0],i.y=C[1]+R,y="center",i.originY=-R;break;case"insideEndTop":case"insideEnd":case"insideEndBottom":i.x=-S*L+v[0],i.y=v[1]+R,y=A[0]>=0?"right":"left",i.originX=S*L,i.originY=-R;break}i.scaleX=i.scaleY=o,i.setStyle({verticalAlign:i.__verticalAlign||m,align:i.__align||y})}},e})(Ct),N2=(function(){function r(e){this.group=new Ct,this._LineCtor=e||I2}return r.prototype.updateData=function(e){var t=this;this._progressiveEls=null;var a=this,n=a.group,i=a._lineData;a._lineData=e,i||n.removeAll();var o=$R(e);e.diff(i).add(function(s){t._doAdd(e,s,o)}).update(function(s,l){t._doUpdate(i,e,l,s,o)}).remove(function(s){n.remove(i.getItemGraphicEl(s))}).execute()},r.prototype.updateLayout=function(){var e=this._lineData;e&&e.eachItemGraphicEl(function(t,a){t.updateLayout(e,a)},this)},r.prototype.incrementalPrepareUpdate=function(e){this._seriesScope=$R(e),this._lineData=null,this.group.removeAll()},r.prototype.incrementalUpdate=function(e,t){this._progressiveEls=[];function a(s){!s.isGroup&&!I$(s)&&(s.incremental=!0,s.ensureState("emphasis").hoverLayer=!0)}for(var n=e.start;n0}function $R(r){var e=r.hostModel,t=e.getModel("emphasis");return{lineStyle:e.getModel("lineStyle").getLineStyle(),emphasisLineStyle:t.getModel(["lineStyle"]).getLineStyle(),blurLineStyle:e.getModel(["blur","lineStyle"]).getLineStyle(),selectLineStyle:e.getModel(["select","lineStyle"]).getLineStyle(),emphasisDisabled:t.get("disabled"),blurScope:t.get("blurScope"),focus:t.get("focus"),labelStatesModels:nr(e)}}function KR(r){return isNaN(r[0])||isNaN(r[1])}function L_(r){return r&&!KR(r[0])&&!KR(r[1])}var E_=[],R_=[],I_=[],fu=cr,N_=Fs,QR=Math.abs;function JR(r,e,t){for(var a=r[0],n=r[1],i=r[2],o=1/0,s,l=t*t,u=.1,f=.1;f<=.9;f+=.1){E_[0]=fu(a[0],n[0],i[0],f),E_[1]=fu(a[1],n[1],i[1],f);var v=QR(N_(E_,e)-l);v=0?s=s+u:s=s-u:y>=0?s=s-u:s=s+u}return s}function P_(r,e){var t=[],a=ih,n=[[],[],[]],i=[[],[]],o=[];e/=2,r.eachEdge(function(s,l){var u=s.getLayout(),f=s.getVisual("fromSymbol"),v=s.getVisual("toSymbol");u.__original||(u.__original=[hi(u[0]),hi(u[1])],u[2]&&u.__original.push(hi(u[2])));var d=u.__original;if(u[2]!=null){if(Rr(n[0],d[0]),Rr(n[1],d[2]),Rr(n[2],d[1]),f&&f!=="none"){var p=Gf(s.node1),y=JR(n,d[0],p*e);a(n[0][0],n[1][0],n[2][0],y,t),n[0][0]=t[3],n[1][0]=t[4],a(n[0][1],n[1][1],n[2][1],y,t),n[0][1]=t[3],n[1][1]=t[4]}if(v&&v!=="none"){var p=Gf(s.node2),y=JR(n,d[1],p*e);a(n[0][0],n[1][0],n[2][0],y,t),n[1][0]=t[1],n[2][0]=t[2],a(n[0][1],n[1][1],n[2][1],y,t),n[1][1]=t[1],n[2][1]=t[2]}Rr(u[0],n[0]),Rr(u[1],n[2]),Rr(u[2],n[1])}else{if(Rr(i[0],d[0]),Rr(i[1],d[1]),Os(o,i[1],i[0]),Fu(o,o),f&&f!=="none"){var p=Gf(s.node1);bx(i[0],i[0],o,p*e)}if(v&&v!=="none"){var p=Gf(s.node2);bx(i[1],i[1],o,-p*e)}Rr(u[0],i[0]),Rr(u[1],i[1])}})}function t5(r){return r.type==="view"}var N$=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.init=function(t,a){var n=new Wh,i=new N2,o=this.group;this._controller=new Qh(a.getZr()),this._controllerHost={target:o},o.add(n.group),o.add(i.group),this._symbolDraw=n,this._lineDraw=i,this._firstRender=!0},e.prototype.render=function(t,a,n){var i=this,o=t.coordinateSystem;this._model=t;var s=this._symbolDraw,l=this._lineDraw,u=this.group;if(t5(o)){var f={x:o.x,y:o.y,scaleX:o.scaleX,scaleY:o.scaleY};this._firstRender?u.attr(f):Jt(u,f,t)}P_(t.getGraph(),Vf(t));var v=t.getData();s.updateData(v);var d=t.getEdgeData();l.updateData(d),this._updateNodeAndLinkScale(),this._updateController(t,a,n),clearTimeout(this._layoutTimeout);var p=t.forceLayout,y=t.get(["force","layoutAnimation"]);p&&this._startForceLayoutIteration(p,y);var m=t.get("layout");v.graph.eachNode(function(w){var A=w.dataIndex,M=w.getGraphicEl(),C=w.getModel();if(M){M.off("drag").off("dragend");var L=C.get("draggable");L&&M.on("drag",function(R){switch(m){case"force":p.warmUp(),!i._layouting&&i._startForceLayoutIteration(p,y),p.setFixed(A),v.setItemLayout(A,[M.x,M.y]);break;case"circular":v.setItemLayout(A,[M.x,M.y]),w.setLayout({fixed:!0},!0),R2(t,"symbolSize",w,[R.offsetX,R.offsetY]),i.updateLayout(t);break;default:v.setItemLayout(A,[M.x,M.y]),E2(t.getGraph(),t),i.updateLayout(t);break}}).on("dragend",function(){p&&p.setUnfixed(A)}),M.setDraggable(L,!!C.get("cursor"));var E=C.get(["emphasis","focus"]);E==="adjacency"&&(Rt(M).focus=w.getAdjacentDataIndices())}}),v.graph.eachEdge(function(w){var A=w.getGraphicEl(),M=w.getModel().get(["emphasis","focus"]);A&&M==="adjacency"&&(Rt(A).focus={edge:[w.dataIndex],node:[w.node1.dataIndex,w.node2.dataIndex]})});var _=t.get("layout")==="circular"&&t.get(["circular","rotateLabel"]),S=v.getLayout("cx"),b=v.getLayout("cy");v.graph.eachNode(function(w){Lz(w,_,S,b)}),this._firstRender=!1},e.prototype.dispose=function(){this._controller&&this._controller.dispose(),this._controllerHost=null},e.prototype._startForceLayoutIteration=function(t,a){var n=this;(function i(){t.step(function(o){n.updateLayout(n._model),(n._layouting=!o)&&(a?n._layoutTimeout=setTimeout(i,16):i())})})()},e.prototype._updateController=function(t,a,n){var i=this,o=this._controller,s=this._controllerHost,l=this.group;if(o.setPointerChecker(function(u,f,v){var d=l.getBoundingRect();return d.applyTransform(l.transform),d.contain(f,v)&&!by(u,n,t)}),!t5(t.coordinateSystem)){o.disable();return}o.enable(t.get("roam")),s.zoomLimit=t.get("scaleLimit"),s.zoom=t.coordinateSystem.getZoom(),o.off("pan").off("zoom").on("pan",function(u){S2(s,u.dx,u.dy),n.dispatchAction({seriesId:t.id,type:"graphRoam",dx:u.dx,dy:u.dy})}).on("zoom",function(u){b2(s,u.scale,u.originX,u.originY),n.dispatchAction({seriesId:t.id,type:"graphRoam",zoom:u.scale,originX:u.originX,originY:u.originY}),i._updateNodeAndLinkScale(),P_(t.getGraph(),Vf(t)),i._lineDraw.updateLayout(),n.updateLabelLayout()})},e.prototype._updateNodeAndLinkScale=function(){var t=this._model,a=t.getData(),n=Vf(t);a.eachItemGraphicEl(function(i,o){i&&i.setSymbolScale(n)})},e.prototype.updateLayout=function(t){P_(t.getGraph(),Vf(t)),this._symbolDraw.updateLayout(),this._lineDraw.updateLayout()},e.prototype.remove=function(t,a){this._symbolDraw&&this._symbolDraw.remove(),this._lineDraw&&this._lineDraw.remove()},e.type="graph",e})(de);function hu(r){return"_EC_"+r}var P$=(function(){function r(e){this.type="graph",this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={},this._directed=e||!1}return r.prototype.isDirected=function(){return this._directed},r.prototype.addNode=function(e,t){e=e==null?""+t:""+e;var a=this._nodesMap;if(!a[hu(e)]){var n=new Ls(e,t);return n.hostGraph=this,this.nodes.push(n),a[hu(e)]=n,n}},r.prototype.getNodeByIndex=function(e){var t=this.data.getRawIndex(e);return this.nodes[t]},r.prototype.getNodeById=function(e){return this._nodesMap[hu(e)]},r.prototype.addEdge=function(e,t,a){var n=this._nodesMap,i=this._edgesMap;if(Qt(e)&&(e=this.nodes[e]),Qt(t)&&(t=this.nodes[t]),e instanceof Ls||(e=n[hu(e)]),t instanceof Ls||(t=n[hu(t)]),!(!e||!t)){var o=e.id+"-"+t.id,s=new Rz(e,t,a);return s.hostGraph=this,this._directed&&(e.outEdges.push(s),t.inEdges.push(s)),e.edges.push(s),e!==t&&t.edges.push(s),this.edges.push(s),i[o]=s,s}},r.prototype.getEdgeByIndex=function(e){var t=this.edgeData.getRawIndex(e);return this.edges[t]},r.prototype.getEdge=function(e,t){e instanceof Ls&&(e=e.id),t instanceof Ls&&(t=t.id);var a=this._edgesMap;return this._directed?a[e+"-"+t]:a[e+"-"+t]||a[t+"-"+e]},r.prototype.eachNode=function(e,t){for(var a=this.nodes,n=a.length,i=0;i=0&&e.call(t,a[i],i)},r.prototype.eachEdge=function(e,t){for(var a=this.edges,n=a.length,i=0;i=0&&a[i].node1.dataIndex>=0&&a[i].node2.dataIndex>=0&&e.call(t,a[i],i)},r.prototype.breadthFirstTraverse=function(e,t,a,n){if(t instanceof Ls||(t=this._nodesMap[hu(t)]),!!t){for(var i=a==="out"?"outEdges":a==="in"?"inEdges":"edges",o=0;o=0&&l.node2.dataIndex>=0});for(var i=0,o=n.length;i=0&&this[r][e].setItemVisual(this.dataIndex,t,a)},getVisual:function(t){return this[r][e].getItemVisual(this.dataIndex,t)},setLayout:function(t,a){this.dataIndex>=0&&this[r][e].setItemLayout(this.dataIndex,t,a)},getLayout:function(){return this[r][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[r][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[r][e].getRawIndex(this.dataIndex)}}}Xe(Ls,Iz("hostGraph","data"));Xe(Rz,Iz("hostGraph","edgeData"));function Nz(r,e,t,a,n){for(var i=new P$(a),o=0;o "+d)),u++)}var p=t.get("coordinateSystem"),y;if(p==="cartesian2d"||p==="polar")y=Di(r,t);else{var m=Uh.get(p),_=m?m.dimensions||[]:[];Vt(_,"value")<0&&_.concat(["value"]);var S=jh(r,{coordDimensions:_,encodeDefine:t.getEncode()}).dimensions;y=new Pr(S,t),y.initData(r)}var b=new Pr(["value"],t);return b.initData(l,s),n&&n(y,b),dz({mainData:y,struct:i,structAttr:"graph",datas:{node:y,edge:b},datasAttr:{node:"data",edge:"edgeData"}}),i.update(),i}var O$=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.hasSymbolVisual=!0,t}return e.prototype.init=function(t){r.prototype.init.apply(this,arguments);var a=this;function n(){return a._categoriesData}this.legendVisualProvider=new Kh(n,n),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},e.prototype.mergeOption=function(t){r.prototype.mergeOption.apply(this,arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},e.prototype.mergeDefaultAndTheme=function(t){r.prototype.mergeDefaultAndTheme.apply(this,arguments),Js(t,"edgeLabel",["show"])},e.prototype.getInitialData=function(t,a){var n=t.edges||t.links||[],i=t.data||t.nodes||[],o=this;if(i&&n){S$(this);var s=Nz(i,n,this,!0,l);return P(s.edges,function(u){b$(u.node1,u.node2,this,u.dataIndex)},this),s.data}function l(u,f){u.wrapMethod("getItemModel",function(y){var m=o._categoriesModels,_=y.getShallow("category"),S=m[_];return S&&(S.parentModel=y.parentModel,y.parentModel=S),y});var v=oe.prototype.getModel;function d(y,m){var _=v.call(this,y,m);return _.resolveParentPath=p,_}f.wrapMethod("getItemModel",function(y){return y.resolveParentPath=p,y.getModel=d,y});function p(y){if(y&&(y[0]==="label"||y[1]==="label")){var m=y.slice();return y[0]==="label"?m[0]="edgeLabel":y[1]==="label"&&(m[1]="edgeLabel"),m}return y}}},e.prototype.getGraph=function(){return this.getData().graph},e.prototype.getEdgeData=function(){return this.getGraph().edgeData},e.prototype.getCategoriesData=function(){return this._categoriesData},e.prototype.formatTooltip=function(t,a,n){if(n==="edge"){var i=this.getData(),o=this.getDataParams(t,n),s=i.graph.getEdgeByIndex(t),l=i.getName(s.node1.dataIndex),u=i.getName(s.node2.dataIndex),f=[];return l!=null&&f.push(l),u!=null&&f.push(u),ir("nameValue",{name:f.join(" > "),value:o.value,noValue:o.value==null})}var v=oO({series:this,dataIndex:t,multipleSeries:a});return v},e.prototype._updateCategoriesData=function(){var t=st(this.option.categories||[],function(n){return n.value!=null?n:et({value:0},n)}),a=new Pr(["value"],this);a.initData(t),this._categoriesData=a,this._categoriesModels=a.mapArray(function(n){return a.getItemModel(n)})},e.prototype.setZoom=function(t){this.option.zoom=t},e.prototype.setCenter=function(t){this.option.center=t},e.prototype.isAnimationEnabled=function(){return r.prototype.isAnimationEnabled.call(this)&&!(this.get("layout")==="force"&&this.get(["force","layoutAnimation"]))},e.type="series.graph",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={z:2,coordinateSystem:"view",legendHoverLink:!0,layout:null,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,friction:.6,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle",distance:5},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,opacity:.5},emphasis:{scale:!0,label:{show:!0}},select:{itemStyle:{borderColor:"#212121"}}},e})(Se),z$={type:"graphRoam",event:"graphRoam",update:"none"};function k$(r){r.registerChartView(N$),r.registerSeriesModel(O$),r.registerProcessor(g$),r.registerVisual(y$),r.registerVisual(m$),r.registerLayout(w$),r.registerLayout(r.PRIORITY.VISUAL.POST_CHART_LAYOUT,A$),r.registerLayout(C$),r.registerCoordinateSystem("graphView",{dimensions:Jh.dimensions,create:L$}),r.registerAction({type:"focusNodeAdjacency",event:"focusNodeAdjacency",update:"series:focusNodeAdjacency"},Ge),r.registerAction({type:"unfocusNodeAdjacency",event:"unfocusNodeAdjacency",update:"series:unfocusNodeAdjacency"},Ge),r.registerAction(z$,function(e,t,a){t.eachComponent({mainType:"series",query:e},function(n){var i=n.coordinateSystem,o=T2(i,e,void 0,a);n.setCenter&&n.setCenter(o.center),n.setZoom&&n.setZoom(o.zoom)})})}var B$=(function(){function r(){this.angle=0,this.width=10,this.r=10,this.x=0,this.y=0}return r})(),V$=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;return a.type="pointer",a}return e.prototype.getDefaultShape=function(){return new B$},e.prototype.buildPath=function(t,a){var n=Math.cos,i=Math.sin,o=a.r,s=a.width,l=a.angle,u=a.x-n(l)*s*(s>=o/3?1:2),f=a.y-i(l)*s*(s>=o/3?1:2);l=a.angle-Math.PI/2,t.moveTo(u,f),t.lineTo(a.x+n(l)*s,a.y+i(l)*s),t.lineTo(a.x+n(a.angle)*o,a.y+i(a.angle)*o),t.lineTo(a.x-n(l)*s,a.y-i(l)*s),t.lineTo(u,f)},e})(Ut);function G$(r,e){var t=r.get("center"),a=e.getWidth(),n=e.getHeight(),i=Math.min(a,n),o=ft(t[0],e.getWidth()),s=ft(t[1],e.getHeight()),l=ft(r.get("radius"),i/2);return{cx:o,cy:s,r:l}}function cp(r,e){var t=r==null?"":r+"";return e&&(vt(e)?t=e.replace("{value}",t):bt(e)&&(t=e(r))),t}var H$=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){this.group.removeAll();var i=t.get(["axisLine","lineStyle","color"]),o=G$(t,n);this._renderMain(t,a,n,i,o),this._data=t.getData()},e.prototype.dispose=function(){},e.prototype._renderMain=function(t,a,n,i,o){var s=this.group,l=t.get("clockwise"),u=-t.get("startAngle")/180*Math.PI,f=-t.get("endAngle")/180*Math.PI,v=t.getModel("axisLine"),d=v.get("roundCap"),p=d?bg:Br,y=v.get("show"),m=v.getModel("lineStyle"),_=m.get("width"),S=[u,f];R3(S,!l),u=S[0],f=S[1];for(var b=f-u,w=u,A=[],M=0;y&&M=R&&(N===0?0:i[N-1][0])Math.PI/2&&(ot+=Math.PI)):rt==="tangential"?ot=-E-Math.PI/2:Qt(rt)&&(ot=rt*Math.PI/180),ot===0?v.add(new $t({style:xe(w,{text:K,x:U,y:W,verticalAlign:F<-.8?"top":F>.8?"bottom":"middle",align:H<-.4?"left":H>.4?"right":"center"},{inheritColor:nt}),silent:!0})):v.add(new $t({style:xe(w,{text:K,x:U,y:W,verticalAlign:"middle",align:"center"},{inheritColor:nt}),silent:!0,originX:U,originY:W,rotation:ot}))}if(b.get("show")&&B!==A){var j=b.get("distance");j=j?j+f:f;for(var ht=0;ht<=M;ht++){H=Math.cos(E),F=Math.sin(E);var gt=new er({shape:{x1:H*(y-j)+d,y1:F*(y-j)+p,x2:H*(y-L-j)+d,y2:F*(y-L-j)+p},silent:!0,style:k});k.stroke==="auto"&>.setStyle({stroke:i((B+ht/M)/A)}),v.add(gt),E+=N}E-=N}else E+=R}},e.prototype._renderPointer=function(t,a,n,i,o,s,l,u,f){var v=this.group,d=this._data,p=this._progressEls,y=[],m=t.get(["pointer","show"]),_=t.getModel("progress"),S=_.get("show"),b=t.getData(),w=b.mapDimension("value"),A=+t.get("min"),M=+t.get("max"),C=[A,M],L=[s,l];function E(N,O){var k=b.getItemModel(N),G=k.getModel("pointer"),H=ft(G.get("width"),o.r),F=ft(G.get("length"),o.r),B=t.get(["pointer","icon"]),j=G.get("offsetCenter"),Y=ft(j[0],o.r),K=ft(j[1],o.r),nt=G.get("keepAspect"),U;return B?U=Ye(B,Y-H/2,K-F,H,F,null,nt):U=new V$({shape:{angle:-Math.PI/2,width:H,r:F,x:Y,y:K}}),U.rotation=-(O+Math.PI/2),U.x=o.cx,U.y=o.cy,U}function R(N,O){var k=_.get("roundCap"),G=k?bg:Br,H=_.get("overlap"),F=H?_.get("width"):f/b.count(),B=H?o.r-F:o.r-(N+1)*F,j=H?o.r:o.r-N*F,Y=new G({shape:{startAngle:s,endAngle:O,cx:o.cx,cy:o.cy,clockwise:u,r0:B,r:j}});return H&&(Y.z2=M-b.get(w,N)%M),Y}(S||m)&&(b.diff(d).add(function(N){var O=b.get(w,N);if(m){var k=E(N,s);Le(k,{rotation:-((isNaN(+O)?L[0]:se(O,C,L,!0))+Math.PI/2)},t),v.add(k),b.setItemGraphicEl(N,k)}if(S){var G=R(N,s),H=_.get("clip");Le(G,{shape:{endAngle:se(O,C,L,H)}},t),v.add(G),Zx(t.seriesIndex,b.dataType,N,G),y[N]=G}}).update(function(N,O){var k=b.get(w,N);if(m){var G=d.getItemGraphicEl(O),H=G?G.rotation:s,F=E(N,H);F.rotation=H,Jt(F,{rotation:-((isNaN(+k)?L[0]:se(k,C,L,!0))+Math.PI/2)},t),v.add(F),b.setItemGraphicEl(N,F)}if(S){var B=p[O],j=B?B.shape.endAngle:s,Y=R(N,j),K=_.get("clip");Jt(Y,{shape:{endAngle:se(k,C,L,K)}},t),v.add(Y),Zx(t.seriesIndex,b.dataType,N,Y),y[N]=Y}}).execute(),b.each(function(N){var O=b.getItemModel(N),k=O.getModel("emphasis"),G=k.get("focus"),H=k.get("blurScope"),F=k.get("disabled");if(m){var B=b.getItemGraphicEl(N),j=b.getItemVisual(N,"style"),Y=j.fill;if(B instanceof hr){var K=B.style;B.useStyle(et({image:K.image,x:K.x,y:K.y,width:K.width,height:K.height},j))}else B.useStyle(j),B.type!=="pointer"&&B.setColor(Y);B.setStyle(O.getModel(["pointer","itemStyle"]).getItemStyle()),B.style.fill==="auto"&&B.setStyle("fill",i(se(b.get(w,N),C,[0,1],!0))),B.z2EmphasisLift=0,xr(B,O),Pe(B,G,H,F)}if(S){var nt=y[N];nt.useStyle(b.getItemVisual(N,"style")),nt.setStyle(O.getModel(["progress","itemStyle"]).getItemStyle()),nt.z2EmphasisLift=0,xr(nt,O),Pe(nt,G,H,F)}}),this._progressEls=y)},e.prototype._renderAnchor=function(t,a){var n=t.getModel("anchor"),i=n.get("show");if(i){var o=n.get("size"),s=n.get("icon"),l=n.get("offsetCenter"),u=n.get("keepAspect"),f=Ye(s,a.cx-o/2+ft(l[0],a.r),a.cy-o/2+ft(l[1],a.r),o,o,null,u);f.z2=n.get("showAbove")?1:0,f.setStyle(n.getModel("itemStyle").getItemStyle()),this.group.add(f)}},e.prototype._renderTitleAndDetail=function(t,a,n,i,o){var s=this,l=t.getData(),u=l.mapDimension("value"),f=+t.get("min"),v=+t.get("max"),d=new Ct,p=[],y=[],m=t.isAnimationEnabled(),_=t.get(["pointer","showAbove"]);l.diff(this._data).add(function(S){p[S]=new $t({silent:!0}),y[S]=new $t({silent:!0})}).update(function(S,b){p[S]=s._titleEls[b],y[S]=s._detailEls[b]}).execute(),l.each(function(S){var b=l.getItemModel(S),w=l.get(u,S),A=new Ct,M=i(se(w,[f,v],[0,1],!0)),C=b.getModel("title");if(C.get("show")){var L=C.get("offsetCenter"),E=o.cx+ft(L[0],o.r),R=o.cy+ft(L[1],o.r),N=p[S];N.attr({z2:_?0:2,style:xe(C,{x:E,y:R,text:l.getName(S),align:"center",verticalAlign:"middle"},{inheritColor:M})}),A.add(N)}var O=b.getModel("detail");if(O.get("show")){var k=O.get("offsetCenter"),G=o.cx+ft(k[0],o.r),H=o.cy+ft(k[1],o.r),F=ft(O.get("width"),o.r),B=ft(O.get("height"),o.r),j=t.get(["progress","show"])?l.getItemVisual(S,"style").fill:M,N=y[S],Y=O.get("formatter");N.attr({z2:_?0:2,style:xe(O,{x:G,y:H,text:cp(w,Y),width:isNaN(F)?null:F,height:isNaN(B)?null:B,align:"center",verticalAlign:"middle"},{inheritColor:j})}),cP(N,{normal:O},w,function(nt){return cp(nt,Y)}),m&&fP(N,S,l,t,{getFormattedLabel:function(nt,U,W,rt,ot,ht){return cp(ht?ht.interpolatedValue:w,Y)}}),A.add(N)}d.add(A)}),this.group.add(d),this._titleEls=p,this._detailEls=y},e.type="gauge",e})(de),U$=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.visualStyleAccessPath="itemStyle",t}return e.prototype.getInitialData=function(t,a){return ac(this,["value"])},e.type="series.gauge",e.defaultOption={z:2,colorBy:"data",center:["50%","50%"],legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,clockwise:!0,min:0,max:100,splitNumber:10,axisLine:{show:!0,roundCap:!1,lineStyle:{color:[[1,"#E6EBF8"]],width:10}},progress:{show:!1,overlap:!0,width:10,roundCap:!1,clip:!0},splitLine:{show:!0,length:10,distance:10,lineStyle:{color:"#63677A",width:3,type:"solid"}},axisTick:{show:!0,splitNumber:5,length:6,distance:10,lineStyle:{color:"#63677A",width:1,type:"solid"}},axisLabel:{show:!0,distance:15,color:"#464646",fontSize:12,rotate:0},pointer:{icon:null,offsetCenter:[0,0],show:!0,showAbove:!0,length:"60%",width:6,keepAspect:!1},anchor:{show:!1,showAbove:!1,size:6,icon:"circle",offsetCenter:[0,0],keepAspect:!1,itemStyle:{color:"#fff",borderWidth:0,borderColor:"#5470c6"}},title:{show:!0,offsetCenter:[0,"20%"],color:"#464646",fontSize:16,valueAnimation:!1},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:null,padding:[5,10],offsetCenter:[0,"40%"],color:"#464646",fontSize:30,fontWeight:"bold",lineHeight:30,valueAnimation:!1}},e})(Se);function F$(r){r.registerChartView(H$),r.registerSeriesModel(U$)}var j$=["itemStyle","opacity"],Y$=(function(r){$(e,r);function e(t,a){var n=r.call(this)||this,i=n,o=new Gr,s=new $t;return i.setTextContent(s),n.setTextGuideLine(o),n.updateData(t,a,!0),n}return e.prototype.updateData=function(t,a,n){var i=this,o=t.hostModel,s=t.getItemModel(a),l=t.getItemLayout(a),u=s.getModel("emphasis"),f=s.get(j$);f=f??1,n||cn(i),i.useStyle(t.getItemVisual(a,"style")),i.style.lineJoin="round",n?(i.setShape({points:l.points}),i.style.opacity=0,Le(i,{style:{opacity:f}},o,a)):Jt(i,{style:{opacity:f},shape:{points:l.points}},o,a),xr(i,s),this._updateLabel(t,a),Pe(this,u.get("focus"),u.get("blurScope"),u.get("disabled"))},e.prototype._updateLabel=function(t,a){var n=this,i=this.getTextGuideLine(),o=n.getTextContent(),s=t.hostModel,l=t.getItemModel(a),u=t.getItemLayout(a),f=u.label,v=t.getItemVisual(a,"style"),d=v.fill;Sr(o,nr(l),{labelFetcher:t.hostModel,labelDataIndex:a,defaultOpacity:v.opacity,defaultText:t.getName(a)},{normal:{align:f.textAlign,verticalAlign:f.verticalAlign}}),n.setTextConfig({local:!0,inside:!!f.inside,insideStroke:d,outsideFill:d});var p=f.linePoints;i.setShape({points:p}),n.textGuideLineConfig={anchor:p?new Pt(p[0][0],p[0][1]):null},Jt(o,{style:{x:f.x,y:f.y}},s,a),o.attr({rotation:f.rotation,originX:f.x,originY:f.y,z2:10}),f2(n,h2(l),{stroke:d})},e})(Vr),X$=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.ignoreLabelLineUpdate=!0,t}return e.prototype.render=function(t,a,n){var i=t.getData(),o=this._data,s=this.group;i.diff(o).add(function(l){var u=new Y$(i,l);i.setItemGraphicEl(l,u),s.add(u)}).update(function(l,u){var f=o.getItemGraphicEl(u);f.updateData(i,l),s.add(f),i.setItemGraphicEl(l,f)}).remove(function(l){var u=o.getItemGraphicEl(l);fh(u,t,l)}).execute(),this._data=i},e.prototype.remove=function(){this.group.removeAll(),this._data=null},e.prototype.dispose=function(){},e.type="funnel",e})(de),Z$=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.init=function(t){r.prototype.init.apply(this,arguments),this.legendVisualProvider=new Kh(dt(this.getData,this),dt(this.getRawData,this)),this._defaultLabelLine(t)},e.prototype.getInitialData=function(t,a){return ac(this,{coordDimensions:["value"],encodeDefaulter:It(Fb,this)})},e.prototype._defaultLabelLine=function(t){Js(t,"labelLine",["show"]);var a=t.labelLine,n=t.emphasis.labelLine;a.show=a.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.prototype.getDataParams=function(t){var a=this.getData(),n=r.prototype.getDataParams.call(this,t),i=a.mapDimension("value"),o=a.getSum(i);return n.percent=o?+(a.get(i,t)/o*100).toFixed(2):0,n.$vars.push("percent"),n},e.type="series.funnel",e.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",orient:"vertical",gap:0,funnelAlign:"center",label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1}},itemStyle:{borderColor:"#fff",borderWidth:1},emphasis:{label:{show:!0}},select:{itemStyle:{borderColor:"#212121"}}},e})(Se);function W$(r,e){return Qe(r.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function q$(r,e){for(var t=r.mapDimension("value"),a=r.mapArray(t,function(l){return l}),n=[],i=e==="ascending",o=0,s=r.count();ofK)return;var n=this._model.coordinateSystem.getSlidedAxisExpandWindow([r.offsetX,r.offsetY]);n.behavior!=="none"&&this._dispatchExpand({axisExpandWindow:n.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(r){if(!(this._mouseDownPoint||!z_(this,"mousemove"))){var e=this._model,t=e.coordinateSystem.getSlidedAxisExpandWindow([r.offsetX,r.offsetY]),a=t.behavior;a==="jump"&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand(a==="none"?null:{axisExpandWindow:t.axisExpandWindow,animation:a==="jump"?null:{duration:0}})}}};function z_(r,e){var t=r._model;return t.get("axisExpandable")&&t.get("axisExpandTriggerOn")===e}var dK=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.init=function(){r.prototype.init.apply(this,arguments),this.mergeOption({})},e.prototype.mergeOption=function(t){var a=this.option;t&&zt(a,t,!0),this._initDimensions()},e.prototype.contains=function(t,a){var n=t.get("parallelIndex");return n!=null&&a.getComponent("parallel",n)===this},e.prototype.setAxisExpand=function(t){P(["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandWindow"],function(a){t.hasOwnProperty(a)&&(this.option[a]=t[a])},this)},e.prototype._initDimensions=function(){var t=this.dimensions=[],a=this.parallelAxisIndex=[],n=le(this.ecModel.queryComponents({mainType:"parallelAxis"}),function(i){return(i.get("parallelIndex")||0)===this.componentIndex},this);P(n,function(i){t.push("dim"+i.get("dim")),a.push(i.componentIndex)})},e.type="parallel",e.dependencies=["parallelAxis"],e.layoutMode="box",e.defaultOption={z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,axisExpandRate:17,axisExpandDebounce:50,axisExpandSlideTriggerArea:[-.15,.05,.4],axisExpandTriggerOn:"click",parallelAxisDefault:null},e})(jt),pK=(function(r){$(e,r);function e(t,a,n,i,o){var s=r.call(this,t,a,n)||this;return s.type=i||"value",s.axisIndex=o,s}return e.prototype.isHorizontal=function(){return this.coordinateSystem.getModel().get("layout")!=="horizontal"},e})(hn);function hl(r,e,t,a,n,i){r=r||0;var o=t[1]-t[0];if(n!=null&&(n=vu(n,[0,o])),i!=null&&(i=Math.max(i,n??0)),a==="all"){var s=Math.abs(e[1]-e[0]);s=vu(s,[0,o]),n=i=vu(s,[n,i]),a=0}e[0]=vu(e[0],t),e[1]=vu(e[1],t);var l=k_(e,a);e[a]+=r;var u=n||0,f=t.slice();l.sign<0?f[0]+=u:f[1]-=u,e[a]=vu(e[a],f);var v;return v=k_(e,a),n!=null&&(v.sign!==l.sign||v.spani&&(e[1-a]=e[a]+v.sign*i),e}function k_(r,e){var t=r[e]-r[1-e];return{span:Math.abs(t),sign:t>0?-1:t<0?1:e?-1:1}}function vu(r,e){return Math.min(e[1]!=null?e[1]:1/0,Math.max(e[0]!=null?e[0]:-1/0,r))}var B_=P,Oz=Math.min,zz=Math.max,a5=Math.floor,gK=Math.ceil,n5=Oe,yK=Math.PI,mK=(function(){function r(e,t,a){this.type="parallel",this._axesMap=xt(),this._axesLayout={},this.dimensions=e.dimensions,this._model=e,this._init(e,t,a)}return r.prototype._init=function(e,t,a){var n=e.dimensions,i=e.parallelAxisIndex;B_(n,function(o,s){var l=i[s],u=t.getComponent("parallelAxis",l),f=this._axesMap.set(o,new pK(o,_y(u),[0,0],u.get("type"),l)),v=f.type==="category";f.onBand=v&&u.get("boundaryGap"),f.inverse=u.get("inverse"),u.axis=f,f.model=u,f.coordinateSystem=u.coordinateSystem=this},this)},r.prototype.update=function(e,t){this._updateAxesFromSeries(this._model,e)},r.prototype.containPoint=function(e){var t=this._makeLayoutInfo(),a=t.axisBase,n=t.layoutBase,i=t.pixelDimIndex,o=e[1-i],s=e[i];return o>=a&&o<=a+t.axisLength&&s>=n&&s<=n+t.layoutLength},r.prototype.getModel=function(){return this._model},r.prototype._updateAxesFromSeries=function(e,t){t.eachSeries(function(a){if(e.contains(a,t)){var n=a.getData();B_(this.dimensions,function(i){var o=this._axesMap.get(i);o.scale.unionExtentFromData(n,n.mapDimension(i)),zu(o.scale,o.model)},this)}},this)},r.prototype.resize=function(e,t){this._rect=Qe(e.getBoxLayoutParams(),{width:t.getWidth(),height:t.getHeight()}),this._layoutAxes()},r.prototype.getRect=function(){return this._rect},r.prototype._makeLayoutInfo=function(){var e=this._model,t=this._rect,a=["x","y"],n=["width","height"],i=e.get("layout"),o=i==="horizontal"?0:1,s=t[n[o]],l=[0,s],u=this.dimensions.length,f=fp(e.get("axisExpandWidth"),l),v=fp(e.get("axisExpandCount")||0,[0,u]),d=e.get("axisExpandable")&&u>3&&u>v&&v>1&&f>0&&s>0,p=e.get("axisExpandWindow"),y;if(p)y=fp(p[1]-p[0],l),p[1]=p[0]+y;else{y=fp(f*(v-1),l);var m=e.get("axisExpandCenter")||a5(u/2);p=[f*m-y/2],p[1]=p[0]+y}var _=(s-y)/(u-v);_<3&&(_=0);var S=[a5(n5(p[0]/f,1))+1,gK(n5(p[1]/f,1))-1],b=_/f*p[0];return{layout:i,pixelDimIndex:o,layoutBase:t[a[o]],layoutLength:s,axisBase:t[a[1-o]],axisLength:t[n[1-o]],axisExpandable:d,axisExpandWidth:f,axisCollapseWidth:_,axisExpandWindow:p,axisCount:u,winInnerIndices:S,axisExpandWindow0Pos:b}},r.prototype._layoutAxes=function(){var e=this._rect,t=this._axesMap,a=this.dimensions,n=this._makeLayoutInfo(),i=n.layout;t.each(function(o){var s=[0,n.axisLength],l=o.inverse?1:0;o.setExtent(s[l],s[1-l])}),B_(a,function(o,s){var l=(n.axisExpandable?xK:_K)(s,n),u={horizontal:{x:l.position,y:n.axisLength},vertical:{x:0,y:l.position}},f={horizontal:yK/2,vertical:0},v=[u[i].x+e.x,u[i].y+e.y],d=f[i],p=Ua();sl(p,p,d),Pn(p,p,v),this._axesLayout[o]={position:v,rotation:d,transform:p,axisNameAvailableWidth:l.axisNameAvailableWidth,axisLabelShow:l.axisLabelShow,nameTruncateMaxWidth:l.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}},this)},r.prototype.getAxis=function(e){return this._axesMap.get(e)},r.prototype.dataToPoint=function(e,t){return this.axisCoordToPoint(this._axesMap.get(t).dataToCoord(e),t)},r.prototype.eachActiveState=function(e,t,a,n){a==null&&(a=0),n==null&&(n=e.count());var i=this._axesMap,o=this.dimensions,s=[],l=[];P(o,function(_){s.push(e.mapDimension(_)),l.push(i.get(_).model)});for(var u=this.hasAxisBrushed(),f=a;fi*(1-v[0])?(u="jump",l=s-i*(1-v[2])):(l=s-i*v[1])>=0&&(l=s-i*(1-v[1]))<=0&&(l=0),l*=t.axisExpandWidth/f,l?hl(l,n,o,"all"):u="none";else{var p=n[1]-n[0],y=o[1]*s/p;n=[zz(0,y-p/2)],n[1]=Oz(o[1],n[0]+p),n[0]=n[1]-p}return{axisExpandWindow:n,behavior:u}},r})();function fp(r,e){return Oz(zz(r,e[0]),e[1])}function _K(r,e){var t=e.layoutLength/(e.axisCount-1);return{position:t*r,axisNameAvailableWidth:t,axisLabelShow:!0}}function xK(r,e){var t=e.layoutLength,a=e.axisExpandWidth,n=e.axisCount,i=e.axisCollapseWidth,o=e.winInnerIndices,s,l=i,u=!1,f;return r=0;n--)Ga(a[n])},e.prototype.getActiveState=function(t){var a=this.activeIntervals;if(!a.length)return"normal";if(t==null||isNaN(+t))return"inactive";if(a.length===1){var n=a[0];if(n[0]<=t&&t<=n[1])return"active"}else for(var i=0,o=a.length;iAK}function Uz(r){var e=r.length-1;return e<0&&(e=0),[r[0],r[e]]}function Fz(r,e,t,a){var n=new Ct;return n.add(new Wt({name:"main",style:B2(t),silent:!0,draggable:!0,cursor:"move",drift:It(s5,r,e,n,["n","s","w","e"]),ondragend:It(il,e,{isEnd:!0})})),P(a,function(i){n.add(new Wt({name:i.join(""),style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:It(s5,r,e,n,i),ondragend:It(il,e,{isEnd:!0})}))}),n}function jz(r,e,t,a){var n=a.brushStyle.lineWidth||0,i=Vu(n,DK),o=t[0][0],s=t[1][0],l=o-n/2,u=s-n/2,f=t[0][1],v=t[1][1],d=f-i+n/2,p=v-i+n/2,y=f-o,m=v-s,_=y+n,S=m+n;si(r,e,"main",o,s,y,m),a.transformable&&(si(r,e,"w",l,u,i,S),si(r,e,"e",d,u,i,S),si(r,e,"n",l,u,_,i),si(r,e,"s",l,p,_,i),si(r,e,"nw",l,u,i,i),si(r,e,"ne",d,u,i,i),si(r,e,"sw",l,p,i,i),si(r,e,"se",d,p,i,i))}function VS(r,e){var t=e.__brushOption,a=t.transformable,n=e.childAt(0);n.useStyle(B2(t)),n.attr({silent:!a,cursor:a?"move":"default"}),P([["w"],["e"],["n"],["s"],["s","e"],["s","w"],["n","e"],["n","w"]],function(i){var o=e.childOfName(i.join("")),s=i.length===1?GS(r,i[0]):IK(r,i);o&&o.attr({silent:!a,invisible:!a,cursor:a?MK[s]+"-resize":null})})}function si(r,e,t,a,n,i,o){var s=e.childOfName(t);s&&s.setShape(PK(V2(r,e,[[a,n],[a+i,n+o]])))}function B2(r){return wt({strokeNoScale:!0},r.brushStyle)}function Yz(r,e,t,a){var n=[Mh(r,t),Mh(e,a)],i=[Vu(r,t),Vu(e,a)];return[[n[0],i[0]],[n[1],i[1]]]}function RK(r){return Ws(r.group)}function GS(r,e){var t={w:"left",e:"right",n:"top",s:"bottom"},a={left:"w",right:"e",top:"n",bottom:"s"},n=ny(t[e],RK(r));return a[n]}function IK(r,e){var t=[GS(r,e[0]),GS(r,e[1])];return(t[0]==="e"||t[0]==="w")&&t.reverse(),t.join("")}function s5(r,e,t,a,n,i){var o=t.__brushOption,s=r.toRectRange(o.range),l=Xz(e,n,i);P(a,function(u){var f=CK[u];s[f[0]][f[1]]+=l[f[0]]}),o.range=r.fromRectRange(Yz(s[0][0],s[1][0],s[0][1],s[1][1])),O2(e,t),il(e,{isEnd:!1})}function NK(r,e,t,a){var n=e.__brushOption.range,i=Xz(r,t,a);P(n,function(o){o[0]+=i[0],o[1]+=i[1]}),O2(r,e),il(r,{isEnd:!1})}function Xz(r,e,t){var a=r.group,n=a.transformCoordToLocal(e,t),i=a.transformCoordToLocal(0,0);return[n[0]-i[0],n[1]-i[1]]}function V2(r,e,t){var a=Hz(r,e);return a&&a!==nl?a.clipPath(t,r._transform):Dt(t)}function PK(r){var e=Mh(r[0][0],r[1][0]),t=Mh(r[0][1],r[1][1]),a=Vu(r[0][0],r[1][0]),n=Vu(r[0][1],r[1][1]);return{x:e,y:t,width:a-e,height:n-t}}function OK(r,e,t){if(!(!r._brushType||kK(r,e.offsetX,e.offsetY))){var a=r._zr,n=r._covers,i=k2(r,e,t);if(!r._dragging)for(var o=0;oa.getWidth()||t<0||t>a.getHeight()}var Dy={lineX:c5(0),lineY:c5(1),rect:{createCover:function(r,e){function t(a){return a}return Fz({toRectRange:t,fromRectRange:t},r,e,[["w"],["e"],["n"],["s"],["s","e"],["s","w"],["n","e"],["n","w"]])},getCreatingRange:function(r){var e=Uz(r);return Yz(e[1][0],e[1][1],e[0][0],e[0][1])},updateCoverShape:function(r,e,t,a){jz(r,e,t,a)},updateCommon:VS,contain:US},polygon:{createCover:function(r,e){var t=new Ct;return t.add(new Gr({name:"main",style:B2(e),silent:!0})),t},getCreatingRange:function(r){return r},endCreating:function(r,e){e.remove(e.childAt(0)),e.add(new Vr({name:"main",draggable:!0,drift:It(NK,r,e),ondragend:It(il,r,{isEnd:!0})}))},updateCoverShape:function(r,e,t,a){e.childAt(0).setShape({points:V2(r,e,t)})},updateCommon:VS,contain:US}};function c5(r){return{createCover:function(e,t){return Fz({toRectRange:function(a){var n=[a,[0,100]];return r&&n.reverse(),n},fromRectRange:function(a){return a[r]}},e,t,[[["w"],["e"]],[["n"],["s"]]][r])},getCreatingRange:function(e){var t=Uz(e),a=Mh(t[0][r],t[1][r]),n=Vu(t[0][r],t[1][r]);return[a,n]},updateCoverShape:function(e,t,a,n){var i,o=Hz(e,t);if(o!==nl&&o.getLinearBrushOtherExtent)i=o.getLinearBrushOtherExtent(r);else{var s=e._zr;i=[0,[s.getWidth(),s.getHeight()][1-r]]}var l=[a,i];r&&l.reverse(),jz(e,t,l,n)},updateCommon:VS,contain:US}}function Wz(r){return r=G2(r),function(e){return oP(e,r)}}function qz(r,e){return r=G2(r),function(t){var a=e??t,n=a?r.width:r.height,i=a?r.x:r.y;return[i,i+(n||0)]}}function $z(r,e,t){var a=G2(r);return function(n,i){return a.contain(i[0],i[1])&&!by(n,e,t)}}function G2(r){return kt.create(r)}var BK=["axisLine","axisTickLabel","axisName"],VK=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.init=function(t,a){r.prototype.init.apply(this,arguments),(this._brushController=new P2(a.getZr())).on("brush",dt(this._onBrush,this))},e.prototype.render=function(t,a,n,i){if(!GK(t,a,i)){this.axisModel=t,this.api=n,this.group.removeAll();var o=this._axisGroup;if(this._axisGroup=new Ct,this.group.add(this._axisGroup),!!t.get("show")){var s=UK(t,a),l=s.coordinateSystem,u=t.getAreaSelectStyle(),f=u.width,v=t.axis.dim,d=l.getAxisLayout(v),p=et({strokeContainThreshold:f},d),y=new Or(t,p);P(BK,y.add,y),this._axisGroup.add(y.getGroup()),this._refreshBrushController(p,u,t,s,f,n),Vh(o,this._axisGroup,t)}}},e.prototype._refreshBrushController=function(t,a,n,i,o,s){var l=n.axis.getExtent(),u=l[1]-l[0],f=Math.min(30,Math.abs(u)*.1),v=kt.create({x:l[0],y:-o/2,width:u,height:o});v.x-=f,v.width+=2*f,this._brushController.mount({enableGlobalPan:!0,rotation:t.rotation,x:t.position[0],y:t.position[1]}).setPanels([{panelId:"pl",clipPath:Wz(v),isTargetByCursor:$z(v,s,i),getLinearBrushOtherExtent:qz(v,0)}]).enableBrush({brushType:"lineX",brushStyle:a,removeOnClick:!0}).updateCovers(HK(n))},e.prototype._onBrush=function(t){var a=t.areas,n=this.axisModel,i=n.axis,o=st(a,function(s){return[i.coordToData(s.range[0],!0),i.coordToData(s.range[1],!0)]});(!n.option.realtime===t.isEnd||t.removeOnClick)&&this.api.dispatchAction({type:"axisAreaSelect",parallelAxisId:n.id,intervals:o})},e.prototype.dispose=function(){this._brushController.dispose()},e.type="parallelAxis",e})(Ee);function GK(r,e,t){return t&&t.type==="axisAreaSelect"&&e.findComponents({mainType:"parallelAxis",query:t})[0]===r}function HK(r){var e=r.axis;return st(r.activeIntervals,function(t){return{brushType:"lineX",panelId:"pl",range:[e.dataToCoord(t[0],!0),e.dataToCoord(t[1],!0)]}})}function UK(r,e){return e.getComponent("parallel",r.get("parallelIndex"))}var FK={type:"axisAreaSelect",event:"axisAreaSelected"};function jK(r){r.registerAction(FK,function(e,t){t.eachComponent({mainType:"parallelAxis",query:e},function(a){a.axis.model.setActiveIntervals(e.intervals)})}),r.registerAction("parallelAxisExpand",function(e,t){t.eachComponent({mainType:"parallel",query:e},function(a){a.setAxisExpand(e)})})}var YK={type:"value",areaSelectStyle:{width:20,borderWidth:1,borderColor:"rgba(160,197,232)",color:"rgba(160,197,232)",opacity:.3},realtime:!0,z:10};function Kz(r){r.registerComponentView(hK),r.registerComponentModel(dK),r.registerCoordinateSystem("parallel",bK),r.registerPreprocessor(lK),r.registerComponentModel(kS),r.registerComponentView(VK),Bu(r,"parallel",kS,YK),jK(r)}function XK(r){Ht(Kz),r.registerChartView(tK),r.registerSeriesModel(aK),r.registerVisual(r.PRIORITY.VISUAL.BRUSH,sK)}var ZK=(function(){function r(){this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.cpx1=0,this.cpy1=0,this.cpx2=0,this.cpy2=0,this.extent=0}return r})(),WK=(function(r){$(e,r);function e(t){return r.call(this,t)||this}return e.prototype.getDefaultShape=function(){return new ZK},e.prototype.buildPath=function(t,a){var n=a.extent;t.moveTo(a.x1,a.y1),t.bezierCurveTo(a.cpx1,a.cpy1,a.cpx2,a.cpy2,a.x2,a.y2),a.orient==="vertical"?(t.lineTo(a.x2+n,a.y2),t.bezierCurveTo(a.cpx2+n,a.cpy2,a.cpx1+n,a.cpy1,a.x1+n,a.y1)):(t.lineTo(a.x2,a.y2+n),t.bezierCurveTo(a.cpx2,a.cpy2+n,a.cpx1,a.cpy1+n,a.x1,a.y1+n)),t.closePath()},e.prototype.highlight=function(){_i(this)},e.prototype.downplay=function(){xi(this)},e})(Ut),qK=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t._focusAdjacencyDisabled=!1,t}return e.prototype.render=function(t,a,n){var i=this,o=t.getGraph(),s=this.group,l=t.layoutInfo,u=l.width,f=l.height,v=t.getData(),d=t.getData("edge"),p=t.get("orient");this._model=t,s.removeAll(),s.x=l.x,s.y=l.y,o.eachEdge(function(y){var m=new WK,_=Rt(m);_.dataIndex=y.dataIndex,_.seriesIndex=t.seriesIndex,_.dataType="edge";var S=y.getModel(),b=S.getModel("lineStyle"),w=b.get("curveness"),A=y.node1.getLayout(),M=y.node1.getModel(),C=M.get("localX"),L=M.get("localY"),E=y.node2.getLayout(),R=y.node2.getModel(),N=R.get("localX"),O=R.get("localY"),k=y.getLayout(),G,H,F,B,j,Y,K,nt;m.shape.extent=Math.max(1,k.dy),m.shape.orient=p,p==="vertical"?(G=(C!=null?C*u:A.x)+k.sy,H=(L!=null?L*f:A.y)+A.dy,F=(N!=null?N*u:E.x)+k.ty,B=O!=null?O*f:E.y,j=G,Y=H*(1-w)+B*w,K=F,nt=H*w+B*(1-w)):(G=(C!=null?C*u:A.x)+A.dx,H=(L!=null?L*f:A.y)+k.sy,F=N!=null?N*u:E.x,B=(O!=null?O*f:E.y)+k.ty,j=G*(1-w)+F*w,Y=H,K=G*w+F*(1-w),nt=B),m.setShape({x1:G,y1:H,x2:F,y2:B,cpx1:j,cpy1:Y,cpx2:K,cpy2:nt}),m.useStyle(b.getItemStyle()),f5(m.style,p,y);var U=""+S.get("value"),W=nr(S,"edgeLabel");Sr(m,W,{labelFetcher:{getFormattedLabel:function(ht,gt,mt,yt,St,Lt){return t.getFormattedLabel(ht,gt,"edge",yt,Rn(St,W.normal&&W.normal.get("formatter"),U),Lt)}},labelDataIndex:y.dataIndex,defaultText:U}),m.setTextConfig({position:"inside"});var rt=S.getModel("emphasis");xr(m,S,"lineStyle",function(ht){var gt=ht.getItemStyle();return f5(gt,p,y),gt}),s.add(m),d.setItemGraphicEl(y.dataIndex,m);var ot=rt.get("focus");Pe(m,ot==="adjacency"?y.getAdjacentDataIndices():ot==="trajectory"?y.getTrajectoryDataIndices():ot,rt.get("blurScope"),rt.get("disabled"))}),o.eachNode(function(y){var m=y.getLayout(),_=y.getModel(),S=_.get("localX"),b=_.get("localY"),w=_.getModel("emphasis"),A=new Wt({shape:{x:S!=null?S*u:m.x,y:b!=null?b*f:m.y,width:m.dx,height:m.dy},style:_.getModel("itemStyle").getItemStyle(),z2:10});Sr(A,nr(_),{labelFetcher:{getFormattedLabel:function(C,L){return t.getFormattedLabel(C,L,"node")}},labelDataIndex:y.dataIndex,defaultText:y.id}),A.disableLabelAnimation=!0,A.setStyle("fill",y.getVisual("color")),A.setStyle("decal",y.getVisual("style").decal),xr(A,_),s.add(A),v.setItemGraphicEl(y.dataIndex,A),Rt(A).dataType="node";var M=w.get("focus");Pe(A,M==="adjacency"?y.getAdjacentDataIndices():M==="trajectory"?y.getTrajectoryDataIndices():M,w.get("blurScope"),w.get("disabled"))}),v.eachItemGraphicEl(function(y,m){var _=v.getItemModel(m);_.get("draggable")&&(y.drift=function(S,b){i._focusAdjacencyDisabled=!0,this.shape.x+=S,this.shape.y+=b,this.dirty(),n.dispatchAction({type:"dragNode",seriesId:t.id,dataIndex:v.getRawIndex(m),localX:this.shape.x/u,localY:this.shape.y/f})},y.ondragend=function(){i._focusAdjacencyDisabled=!1},y.draggable=!0,y.cursor="move")}),!this._data&&t.isAnimationEnabled()&&s.setClipPath($K(s.getBoundingRect(),t,function(){s.removeClipPath()})),this._data=t.getData()},e.prototype.dispose=function(){},e.type="sankey",e})(de);function f5(r,e,t){switch(r.fill){case"source":r.fill=t.node1.getVisual("color"),r.decal=t.node1.getVisual("style").decal;break;case"target":r.fill=t.node2.getVisual("color"),r.decal=t.node2.getVisual("style").decal;break;case"gradient":var a=t.node1.getVisual("color"),n=t.node2.getVisual("color");vt(a)&&vt(n)&&(r.fill=new Bh(0,0,+(e==="horizontal"),+(e==="vertical"),[{color:a,offset:0},{color:n,offset:1}]))}}function $K(r,e,t){var a=new Wt({shape:{x:r.x-10,y:r.y-10,width:0,height:r.height+20}});return Le(a,{shape:{width:r.width+20}},e,t),a}var KK=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.getInitialData=function(t,a){var n=t.edges||t.links,i=t.data||t.nodes,o=t.levels;this.levelModels=[];for(var s=this.levelModels,l=0;l=0&&(s[o[l].depth]=new oe(o[l],this,a));if(i&&n){var u=Nz(i,n,this,!0,f);return u.data}function f(v,d){v.wrapMethod("getItemModel",function(p,y){var m=p.parentModel,_=m.getData().getItemLayout(y);if(_){var S=_.depth,b=m.levelModels[S];b&&(p.parentModel=b)}return p}),d.wrapMethod("getItemModel",function(p,y){var m=p.parentModel,_=m.getGraph().getEdgeByIndex(y),S=_.node1.getLayout();if(S){var b=S.depth,w=m.levelModels[b];w&&(p.parentModel=w)}return p})}},e.prototype.setNodePosition=function(t,a){var n=this.option.data||this.option.nodes,i=n[t];i.localX=a[0],i.localY=a[1]},e.prototype.getGraph=function(){return this.getData().graph},e.prototype.getEdgeData=function(){return this.getGraph().edgeData},e.prototype.formatTooltip=function(t,a,n){function i(p){return isNaN(p)||p==null}if(n==="edge"){var o=this.getDataParams(t,n),s=o.data,l=o.value,u=s.source+" -- "+s.target;return ir("nameValue",{name:u,value:l,noValue:i(l)})}else{var f=this.getGraph().getNodeByIndex(t),v=f.getLayout().value,d=this.getDataParams(t,n).data.name;return ir("nameValue",{name:d!=null?d+"":null,value:v,noValue:i(v)})}},e.prototype.optionUpdated=function(){},e.prototype.getDataParams=function(t,a){var n=r.prototype.getDataParams.call(this,t,a);if(n.value==null&&a==="node"){var i=this.getGraph().getNodeByIndex(t),o=i.getLayout().value;n.value=o}return n},e.type="series.sankey",e.defaultOption={z:2,coordinateSystem:"view",left:"5%",top:"5%",right:"20%",bottom:"5%",orient:"horizontal",nodeWidth:20,nodeGap:8,draggable:!0,layoutIterations:32,label:{show:!0,position:"right",fontSize:12},edgeLabel:{show:!1,fontSize:12},levels:[],nodeAlign:"justify",lineStyle:{color:"#314656",opacity:.2,curveness:.5},emphasis:{label:{show:!0},lineStyle:{opacity:.5}},select:{itemStyle:{borderColor:"#212121"}},animationEasing:"linear",animationDuration:1e3},e})(Se);function QK(r,e){r.eachSeriesByType("sankey",function(t){var a=t.get("nodeWidth"),n=t.get("nodeGap"),i=JK(t,e);t.layoutInfo=i;var o=i.width,s=i.height,l=t.getGraph(),u=l.nodes,f=l.edges;eQ(u);var v=le(u,function(m){return m.getLayout().value===0}),d=v.length!==0?0:t.get("layoutIterations"),p=t.get("orient"),y=t.get("nodeAlign");tQ(u,f,a,n,o,s,d,p,y)})}function JK(r,e){return Qe(r.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function tQ(r,e,t,a,n,i,o,s,l){rQ(r,e,t,n,i,s,l),oQ(r,e,i,n,a,o,s),pQ(r,s)}function eQ(r){P(r,function(e){var t=Ao(e.outEdges,Mg),a=Ao(e.inEdges,Mg),n=e.getValue()||0,i=Math.max(t,a,n);e.setLayout({value:i},!0)})}function rQ(r,e,t,a,n,i,o){for(var s=[],l=[],u=[],f=[],v=0,d=0;d=0;S&&_.depth>p&&(p=_.depth),m.setLayout({depth:S?_.depth:v},!0),i==="vertical"?m.setLayout({dy:t},!0):m.setLayout({dx:t},!0);for(var b=0;bv-1?p:v-1;o&&o!=="left"&&aQ(r,o,i,L);var E=i==="vertical"?(n-t)/L:(a-t)/L;iQ(r,E,i)}function Qz(r){var e=r.hostGraph.data.getRawDataItem(r.dataIndex);return e.depth!=null&&e.depth>=0}function aQ(r,e,t,a){if(e==="right"){for(var n=[],i=r,o=0;i.length;){for(var s=0;s0;i--)l*=.99,uQ(s,l,o),V_(s,n,t,a,o),dQ(s,l,o),V_(s,n,t,a,o)}function sQ(r,e){var t=[],a=e==="vertical"?"y":"x",n=Fx(r,function(i){return i.getLayout()[a]});return n.keys.sort(function(i,o){return i-o}),P(n.keys,function(i){t.push(n.buckets.get(i))}),t}function lQ(r,e,t,a,n,i){var o=1/0;P(r,function(s){var l=s.length,u=0;P(s,function(v){u+=v.getLayout().value});var f=i==="vertical"?(a-(l-1)*n)/u:(t-(l-1)*n)/u;f0&&(s=l.getLayout()[i]+u,n==="vertical"?l.setLayout({x:s},!0):l.setLayout({y:s},!0)),f=l.getLayout()[i]+l.getLayout()[d]+e;var y=n==="vertical"?a:t;if(u=f-e-y,u>0){s=l.getLayout()[i]-u,n==="vertical"?l.setLayout({x:s},!0):l.setLayout({y:s},!0),f=s;for(var p=v-2;p>=0;--p)l=o[p],u=l.getLayout()[i]+l.getLayout()[d]+e-f,u>0&&(s=l.getLayout()[i]-u,n==="vertical"?l.setLayout({x:s},!0):l.setLayout({y:s},!0)),f=l.getLayout()[i]}})}function uQ(r,e,t){P(r.slice().reverse(),function(a){P(a,function(n){if(n.outEdges.length){var i=Ao(n.outEdges,cQ,t)/Ao(n.outEdges,Mg);if(isNaN(i)){var o=n.outEdges.length;i=o?Ao(n.outEdges,fQ,t)/o:0}if(t==="vertical"){var s=n.getLayout().x+(i-No(n,t))*e;n.setLayout({x:s},!0)}else{var l=n.getLayout().y+(i-No(n,t))*e;n.setLayout({y:l},!0)}}})})}function cQ(r,e){return No(r.node2,e)*r.getValue()}function fQ(r,e){return No(r.node2,e)}function hQ(r,e){return No(r.node1,e)*r.getValue()}function vQ(r,e){return No(r.node1,e)}function No(r,e){return e==="vertical"?r.getLayout().x+r.getLayout().dx/2:r.getLayout().y+r.getLayout().dy/2}function Mg(r){return r.getValue()}function Ao(r,e,t){for(var a=0,n=r.length,i=-1;++io&&(o=l)}),P(a,function(s){var l=new ar({type:"color",mappingMethod:"linear",dataExtent:[i,o],visual:e.get("color")}),u=l.mapValueToVisual(s.getLayout().value),f=s.getModel().get(["itemStyle","color"]);f!=null?(s.setVisual("color",f),s.setVisual("style",{fill:f})):(s.setVisual("color",u),s.setVisual("style",{fill:u}))})}n.length&&P(n,function(s){var l=s.getModel().get("lineStyle");s.setVisual("style",l)})})}function yQ(r){r.registerChartView(qK),r.registerSeriesModel(KK),r.registerLayout(QK),r.registerVisual(gQ),r.registerAction({type:"dragNode",event:"dragnode",update:"update"},function(e,t){t.eachComponent({mainType:"series",subType:"sankey",query:e},function(a){a.setNodePosition(e.dataIndex,[e.localX,e.localY])})})}var Jz=(function(){function r(){}return r.prototype.getInitialData=function(e,t){var a,n=t.getComponent("xAxis",this.get("xAxisIndex")),i=t.getComponent("yAxis",this.get("yAxisIndex")),o=n.get("type"),s=i.get("type"),l;o==="category"?(e.layout="horizontal",a=n.getOrdinalMeta(),l=!0):s==="category"?(e.layout="vertical",a=i.getOrdinalMeta(),l=!0):e.layout=e.layout||"horizontal";var u=["x","y"],f=e.layout==="horizontal"?0:1,v=this._baseAxisDim=u[f],d=u[1-f],p=[n,i],y=p[f].get("type"),m=p[1-f].get("type"),_=e.data;if(_&&l){var S=[];P(_,function(A,M){var C;it(A)?(C=A.slice(),A.unshift(M)):it(A.value)?(C=et({},A),C.value=C.value.slice(),A.value.unshift(M)):C=A,S.push(C)}),e.data=S}var b=this.defaultValueDimensions,w=[{name:v,type:yg(y),ordinalMeta:a,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:d,type:yg(m),dimsDef:b.slice()}];return ac(this,{coordDimensions:w,dimensionsCount:b.length+1,encodeDefaulter:It(NP,w,this)})},r.prototype.getBaseAxis=function(){var e=this._baseAxisDim;return this.ecModel.getComponent(e+"Axis",this.get(e+"AxisIndex")).axis},r})(),tk=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.defaultValueDimensions=[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],t.visualDrawType="stroke",t}return e.type="series.boxplot",e.dependencies=["xAxis","yAxis","grid"],e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,boxWidth:[7,50],itemStyle:{color:"#fff",borderWidth:1},emphasis:{scale:!0,itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:1,shadowOffsetY:1,shadowColor:"rgba(0,0,0,0.2)"}},animationDuration:800},e})(Se);Xe(tk,Jz,!0);var mQ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){var i=t.getData(),o=this.group,s=this._data;this._data||o.removeAll();var l=t.get("layout")==="horizontal"?1:0;i.diff(s).add(function(u){if(i.hasValue(u)){var f=i.getItemLayout(u),v=h5(f,i,u,l,!0);i.setItemGraphicEl(u,v),o.add(v)}}).update(function(u,f){var v=s.getItemGraphicEl(f);if(!i.hasValue(u)){o.remove(v);return}var d=i.getItemLayout(u);v?(cn(v),ek(d,v,i,u)):v=h5(d,i,u,l),o.add(v),i.setItemGraphicEl(u,v)}).remove(function(u){var f=s.getItemGraphicEl(u);f&&o.remove(f)}).execute(),this._data=i},e.prototype.remove=function(t){var a=this.group,n=this._data;this._data=null,n&&n.eachItemGraphicEl(function(i){i&&a.remove(i)})},e.type="boxplot",e})(de),_Q=(function(){function r(){}return r})(),xQ=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;return a.type="boxplotBoxPath",a}return e.prototype.getDefaultShape=function(){return new _Q},e.prototype.buildPath=function(t,a){var n=a.points,i=0;for(t.moveTo(n[i][0],n[i][1]),i++;i<4;i++)t.lineTo(n[i][0],n[i][1]);for(t.closePath();im){var A=[S,w];a.push(A)}}}return{boxData:t,outliers:a}}var CQ={type:"echarts:boxplot",transform:function(e){var t=e.upstream;if(t.sourceFormat!==Cr){var a="";ne(a)}var n=DQ(t.getRawData(),e.config);return[{dimensions:["ItemName","Low","Q1","Q2","Q3","High"],data:n.boxData},{data:n.outliers}]}};function MQ(r){r.registerSeriesModel(tk),r.registerChartView(mQ),r.registerLayout(bQ),r.registerTransform(CQ)}var LQ=["color","borderColor"],EQ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){this.group.removeClipPath(),this._progressiveEls=null,this._updateDrawMode(t),this._isLargeDraw?this._renderLarge(t):this._renderNormal(t)},e.prototype.incrementalPrepareRender=function(t,a,n){this._clear(),this._updateDrawMode(t)},e.prototype.incrementalRender=function(t,a,n,i){this._progressiveEls=[],this._isLargeDraw?this._incrementalRenderLarge(t,a):this._incrementalRenderNormal(t,a)},e.prototype.eachRendered=function(t){Oo(this._progressiveEls||this.group,t)},e.prototype._updateDrawMode=function(t){var a=t.pipelineContext.large;(this._isLargeDraw==null||a!==this._isLargeDraw)&&(this._isLargeDraw=a,this._clear())},e.prototype._renderNormal=function(t){var a=t.getData(),n=this._data,i=this.group,o=a.getLayout("isSimpleBox"),s=t.get("clip",!0),l=t.coordinateSystem,u=l.getArea&&l.getArea();this._data||i.removeAll(),a.diff(n).add(function(f){if(a.hasValue(f)){var v=a.getItemLayout(f);if(s&&v5(u,v))return;var d=G_(v,f,!0);Le(d,{shape:{points:v.ends}},t,f),H_(d,a,f,o),i.add(d),a.setItemGraphicEl(f,d)}}).update(function(f,v){var d=n.getItemGraphicEl(v);if(!a.hasValue(f)){i.remove(d);return}var p=a.getItemLayout(f);if(s&&v5(u,p)){i.remove(d);return}d?(Jt(d,{shape:{points:p.ends}},t,f),cn(d)):d=G_(p),H_(d,a,f,o),i.add(d),a.setItemGraphicEl(f,d)}).remove(function(f){var v=n.getItemGraphicEl(f);v&&i.remove(v)}).execute(),this._data=a},e.prototype._renderLarge=function(t){this._clear(),d5(t,this.group);var a=t.get("clip",!0)?Sy(t.coordinateSystem,!1,t):null;a?this.group.setClipPath(a):this.group.removeClipPath()},e.prototype._incrementalRenderNormal=function(t,a){for(var n=a.getData(),i=n.getLayout("isSimpleBox"),o;(o=t.next())!=null;){var s=n.getItemLayout(o),l=G_(s);H_(l,n,o,i),l.incremental=!0,this.group.add(l),this._progressiveEls.push(l)}},e.prototype._incrementalRenderLarge=function(t,a){d5(a,this.group,this._progressiveEls,!0)},e.prototype.remove=function(t){this._clear()},e.prototype._clear=function(){this.group.removeAll(),this._data=null},e.type="candlestick",e})(de),RQ=(function(){function r(){}return r})(),IQ=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;return a.type="normalCandlestickBox",a}return e.prototype.getDefaultShape=function(){return new RQ},e.prototype.buildPath=function(t,a){var n=a.points;this.__simpleBox?(t.moveTo(n[4][0],n[4][1]),t.lineTo(n[6][0],n[6][1])):(t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1]),t.lineTo(n[2][0],n[2][1]),t.lineTo(n[3][0],n[3][1]),t.closePath(),t.moveTo(n[4][0],n[4][1]),t.lineTo(n[5][0],n[5][1]),t.moveTo(n[6][0],n[6][1]),t.lineTo(n[7][0],n[7][1]))},e})(Ut);function G_(r,e,t){var a=r.ends;return new IQ({shape:{points:t?NQ(a,r):a},z2:100})}function v5(r,e){for(var t=!0,a=0;a0?"borderColor":"borderColor0"])||t.get(["itemStyle",r>0?"color":"color0"]);r===0&&(n=t.get(["itemStyle","borderColorDoji"]));var i=t.getModel("itemStyle").getItemStyle(LQ);e.useStyle(i),e.style.fill=null,e.style.stroke=n}var rk=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.defaultValueDimensions=[{name:"open",defaultTooltip:!0},{name:"close",defaultTooltip:!0},{name:"lowest",defaultTooltip:!0},{name:"highest",defaultTooltip:!0}],t}return e.prototype.getShadowDim=function(){return"open"},e.prototype.brushSelector=function(t,a,n){var i=a.getItemLayout(t);return i&&n.rect(i.brushRect)},e.type="series.candlestick",e.dependencies=["xAxis","yAxis","grid"],e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,clip:!0,itemStyle:{color:"#eb5454",color0:"#47b262",borderColor:"#eb5454",borderColor0:"#47b262",borderColorDoji:null,borderWidth:1},emphasis:{scale:!0,itemStyle:{borderWidth:2}},barMaxWidth:null,barMinWidth:null,barWidth:null,large:!0,largeThreshold:600,progressive:3e3,progressiveThreshold:1e4,progressiveChunkMode:"mod",animationEasing:"linear",animationDuration:300},e})(Se);Xe(rk,Jz,!0);function OQ(r){!r||!it(r.series)||P(r.series,function(e){Tt(e)&&e.type==="k"&&(e.type="candlestick")})}var zQ=["itemStyle","borderColor"],kQ=["itemStyle","borderColor0"],BQ=["itemStyle","borderColorDoji"],VQ=["itemStyle","color"],GQ=["itemStyle","color0"],HQ={seriesType:"candlestick",plan:tc(),performRawSeries:!0,reset:function(r,e){function t(i,o){return o.get(i>0?VQ:GQ)}function a(i,o){return o.get(i===0?BQ:i>0?zQ:kQ)}if(!e.isSeriesFiltered(r)){var n=r.pipelineContext.large;return!n&&{progress:function(i,o){for(var s;(s=i.next())!=null;){var l=o.getItemModel(s),u=o.getItemLayout(s).sign,f=l.getItemStyle();f.fill=t(u,l),f.stroke=a(u,l)||f.fill;var v=o.ensureUniqueItemVisual(s,"style");et(v,f)}}}}}},UQ={seriesType:"candlestick",plan:tc(),reset:function(r){var e=r.coordinateSystem,t=r.getData(),a=FQ(r,t),n=0,i=1,o=["x","y"],s=t.getDimensionIndex(t.mapDimension(o[n])),l=st(t.mapDimensionsAll(o[i]),t.getDimensionIndex,t),u=l[0],f=l[1],v=l[2],d=l[3];if(t.setLayout({candleWidth:a,isSimpleBox:a<=1.3}),s<0||l.length<4)return;return{progress:r.pipelineContext.large?y:p};function p(m,_){for(var S,b=_.getStore();(S=m.next())!=null;){var w=b.get(s,S),A=b.get(u,S),M=b.get(f,S),C=b.get(v,S),L=b.get(d,S),E=Math.min(A,M),R=Math.max(A,M),N=j(E,w),O=j(R,w),k=j(C,w),G=j(L,w),H=[];Y(H,O,0),Y(H,N,1),H.push(nt(G),nt(O),nt(k),nt(N));var F=_.getItemModel(S),B=!!F.get(["itemStyle","borderColorDoji"]);_.setItemLayout(S,{sign:p5(b,S,A,M,f,B),initBaseline:A>M?O[i]:N[i],ends:H,brushRect:K(C,L,w)})}function j(U,W){var rt=[];return rt[n]=W,rt[i]=U,isNaN(W)||isNaN(U)?[NaN,NaN]:e.dataToPoint(rt)}function Y(U,W,rt){var ot=W.slice(),ht=W.slice();ot[n]=Np(ot[n]+a/2,1,!1),ht[n]=Np(ht[n]-a/2,1,!0),rt?U.push(ot,ht):U.push(ht,ot)}function K(U,W,rt){var ot=j(U,rt),ht=j(W,rt);return ot[n]-=a/2,ht[n]-=a/2,{x:ot[0],y:ot[1],width:a,height:ht[1]-ot[1]}}function nt(U){return U[n]=Np(U[n],1),U}}function y(m,_){for(var S=Ln(m.count*4),b=0,w,A=[],M=[],C,L=_.getStore(),E=!!r.get(["itemStyle","borderColorDoji"]);(C=m.next())!=null;){var R=L.get(s,C),N=L.get(u,C),O=L.get(f,C),k=L.get(v,C),G=L.get(d,C);if(isNaN(R)||isNaN(k)||isNaN(G)){S[b++]=NaN,b+=3;continue}S[b++]=p5(L,C,N,O,f,E),A[n]=R,A[i]=k,w=e.dataToPoint(A,null,M),S[b++]=w?w[0]:NaN,S[b++]=w?w[1]:NaN,A[i]=G,w=e.dataToPoint(A,null,M),S[b++]=w?w[1]:NaN}_.setLayout("largePoints",S)}}};function p5(r,e,t,a,n,i){var o;return t>a?o=-1:t0?r.get(n,e-1)<=a?1:-1:1,o}function FQ(r,e){var t=r.getBaseAxis(),a,n=t.type==="category"?t.getBandWidth():(a=t.getExtent(),Math.abs(a[1]-a[0])/e.count()),i=ft(Ot(r.get("barMaxWidth"),n),n),o=ft(Ot(r.get("barMinWidth"),1),n),s=r.get("barWidth");return s!=null?ft(s,n):Math.max(Math.min(n/2,i),o)}function jQ(r){r.registerChartView(EQ),r.registerSeriesModel(rk),r.registerPreprocessor(OQ),r.registerVisual(HQ),r.registerLayout(UQ)}function g5(r,e){var t=e.rippleEffectColor||e.color;r.eachChild(function(a){a.attr({z:e.z,zlevel:e.zlevel,style:{stroke:e.brushType==="stroke"?t:null,fill:e.brushType==="fill"?t:null}})})}var YQ=(function(r){$(e,r);function e(t,a){var n=r.call(this)||this,i=new Zh(t,a),o=new Ct;return n.add(i),n.add(o),n.updateData(t,a),n}return e.prototype.stopEffectAnimation=function(){this.childAt(1).removeAll()},e.prototype.startEffectAnimation=function(t){for(var a=t.symbolType,n=t.color,i=t.rippleNumber,o=this.childAt(1),s=0;s0&&(s=this._getLineLength(i)/f*1e3),s!==this._period||l!==this._loop||u!==this._roundTrip){i.stopAnimation();var d=void 0;bt(v)?d=v(n):d=v,i.__t>0&&(d=-s*i.__t),this._animateSymbol(i,s,d,l,u)}this._period=s,this._loop=l,this._roundTrip=u}},e.prototype._animateSymbol=function(t,a,n,i,o){if(a>0){t.__t=0;var s=this,l=t.animate("",i).when(o?a*2:a,{__t:o?2:1}).delay(n).during(function(){s._updateSymbolPosition(t)});i||l.done(function(){s.remove(t)}),l.start()}},e.prototype._getLineLength=function(t){return ho(t.__p1,t.__cp1)+ho(t.__cp1,t.__p2)},e.prototype._updateAnimationPoints=function(t,a){t.__p1=a[0],t.__p2=a[1],t.__cp1=a[2]||[(a[0][0]+a[1][0])/2,(a[0][1]+a[1][1])/2]},e.prototype.updateData=function(t,a,n){this.childAt(0).updateData(t,a,n),this._updateEffectSymbol(t,a)},e.prototype._updateSymbolPosition=function(t){var a=t.__p1,n=t.__p2,i=t.__cp1,o=t.__t<1?t.__t:2-t.__t,s=[t.x,t.y],l=s.slice(),u=cr,f=Ex;s[0]=u(a[0],i[0],n[0],o),s[1]=u(a[1],i[1],n[1],o);var v=t.__t<1?f(a[0],i[0],n[0],o):f(n[0],i[0],a[0],1-o),d=t.__t<1?f(a[1],i[1],n[1],o):f(n[1],i[1],a[1],1-o);t.rotation=-Math.atan2(d,v)-Math.PI/2,(this._symbolType==="line"||this._symbolType==="rect"||this._symbolType==="roundRect")&&(t.__lastT!==void 0&&t.__lastT=0&&!(i[l]<=a);l--);l=Math.min(l,o-2)}else{for(l=s;la);l++);l=Math.min(l-1,o-2)}var f=(a-i[l])/(i[l+1]-i[l]),v=n[l],d=n[l+1];t.x=v[0]*(1-f)+f*d[0],t.y=v[1]*(1-f)+f*d[1];var p=t.__t<1?d[0]-v[0]:v[0]-d[0],y=t.__t<1?d[1]-v[1]:v[1]-d[1];t.rotation=-Math.atan2(y,p)-Math.PI/2,this._lastFrame=l,this._lastFramePercent=a,t.ignore=!1}},e})(ak),$Q=(function(){function r(){this.polyline=!1,this.curveness=0,this.segs=[]}return r})(),KQ=(function(r){$(e,r);function e(t){var a=r.call(this,t)||this;return a._off=0,a.hoverDataIdx=-1,a}return e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new $Q},e.prototype.buildPath=function(t,a){var n=a.segs,i=a.curveness,o;if(a.polyline)for(o=this._off;o0){t.moveTo(n[o++],n[o++]);for(var l=1;l0){var p=(u+v)/2-(f-d)*i,y=(f+d)/2-(v-u)*i;t.quadraticCurveTo(p,y,v,d)}else t.lineTo(v,d)}this.incremental&&(this._off=o,this.notClear=!0)},e.prototype.findDataIndex=function(t,a){var n=this.shape,i=n.segs,o=n.curveness,s=this.style.lineWidth;if(n.polyline)for(var l=0,u=0;u0)for(var v=i[u++],d=i[u++],p=1;p0){var _=(v+y)/2-(d-m)*o,S=(d+m)/2-(y-v)*o;if(I3(v,d,_,S,y,m,s,t,a))return l}else if(co(v,d,y,m,s,t,a))return l;l++}return-1},e.prototype.contain=function(t,a){var n=this.transformCoordToLocal(t,a),i=this.getBoundingRect();if(t=n[0],a=n[1],i.contain(t,a)){var o=this.hoverDataIdx=this.findDataIndex(t,a);return o>=0}return this.hoverDataIdx=-1,!1},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var a=this.shape,n=a.segs,i=1/0,o=1/0,s=-1/0,l=-1/0,u=0;u0&&(o.dataIndex=l+e.__startIndex)})},r.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},r})(),ik={seriesType:"lines",plan:tc(),reset:function(r){var e=r.coordinateSystem;if(e){var t=r.get("polyline"),a=r.pipelineContext.large;return{progress:function(n,i){var o=[];if(a){var s=void 0,l=n.end-n.start;if(t){for(var u=0,f=n.start;f0&&(f||u.configLayer(s,{motionBlur:!0,lastFrameAlpha:Math.max(Math.min(l/10+.9,1),0)})),o.updateData(i);var v=t.get("clip",!0)&&Sy(t.coordinateSystem,!1,t);v?this.group.setClipPath(v):this.group.removeClipPath(),this._lastZlevel=s,this._finished=!0},e.prototype.incrementalPrepareRender=function(t,a,n){var i=t.getData(),o=this._updateLineDraw(i,t);o.incrementalPrepareUpdate(i),this._clearLayer(n),this._finished=!1},e.prototype.incrementalRender=function(t,a,n){this._lineDraw.incrementalUpdate(t,a.getData()),this._finished=t.end===a.getData().count()},e.prototype.eachRendered=function(t){this._lineDraw&&this._lineDraw.eachRendered(t)},e.prototype.updateTransform=function(t,a,n){var i=t.getData(),o=t.pipelineContext;if(!this._finished||o.large||o.progressiveRender)return{update:!0};var s=ik.reset(t,a,n);s.progress&&s.progress({start:0,end:i.count(),count:i.count()},i),this._lineDraw.updateLayout(),this._clearLayer(n)},e.prototype._updateLineDraw=function(t,a){var n=this._lineDraw,i=this._showEffect(a),o=!!a.get("polyline"),s=a.pipelineContext,l=s.large;return(!n||i!==this._hasEffet||o!==this._isPolyline||l!==this._isLargeDraw)&&(n&&n.remove(),n=this._lineDraw=l?new QQ:new N2(o?i?qQ:nk:i?ak:I2),this._hasEffet=i,this._isPolyline=o,this._isLargeDraw=l),this.group.add(n.group),n},e.prototype._showEffect=function(t){return!!t.get(["effect","show"])},e.prototype._clearLayer=function(t){var a=t.getZr(),n=a.painter.getType()==="svg";!n&&this._lastZlevel!=null&&a.painter.getLayer(this._lastZlevel).clear(!0)},e.prototype.remove=function(t,a){this._lineDraw&&this._lineDraw.remove(),this._lineDraw=null,this._clearLayer(a)},e.prototype.dispose=function(t,a){this.remove(t,a)},e.type="lines",e})(de),tJ=typeof Uint32Array>"u"?Array:Uint32Array,eJ=typeof Float64Array>"u"?Array:Float64Array;function y5(r){var e=r.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(r.data=st(e,function(t){var a=[t[0].coord,t[1].coord],n={coords:a};return t[0].name&&(n.fromName=t[0].name),t[1].name&&(n.toName=t[1].name),db([n,t[0],t[1]])}))}var rJ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.visualStyleAccessPath="lineStyle",t.visualDrawType="stroke",t}return e.prototype.init=function(t){t.data=t.data||[],y5(t);var a=this._processFlatCoordsArray(t.data);this._flatCoords=a.flatCoords,this._flatCoordsOffset=a.flatCoordsOffset,a.flatCoords&&(t.data=new Float32Array(a.count)),r.prototype.init.apply(this,arguments)},e.prototype.mergeOption=function(t){if(y5(t),t.data){var a=this._processFlatCoordsArray(t.data);this._flatCoords=a.flatCoords,this._flatCoordsOffset=a.flatCoordsOffset,a.flatCoords&&(t.data=new Float32Array(a.count))}r.prototype.mergeOption.apply(this,arguments)},e.prototype.appendData=function(t){var a=this._processFlatCoordsArray(t.data);a.flatCoords&&(this._flatCoords?(this._flatCoords=Xp(this._flatCoords,a.flatCoords),this._flatCoordsOffset=Xp(this._flatCoordsOffset,a.flatCoordsOffset)):(this._flatCoords=a.flatCoords,this._flatCoordsOffset=a.flatCoordsOffset),t.data=new Float32Array(a.count)),this.getRawData().appendData(t.data)},e.prototype._getCoordsFromItemModel=function(t){var a=this.getData().getItemModel(t),n=a.option instanceof Array?a.option:a.getShallow("coords");return n},e.prototype.getLineCoordsCount=function(t){return this._flatCoordsOffset?this._flatCoordsOffset[t*2+1]:this._getCoordsFromItemModel(t).length},e.prototype.getLineCoords=function(t,a){if(this._flatCoordsOffset){for(var n=this._flatCoordsOffset[t*2],i=this._flatCoordsOffset[t*2+1],o=0;o ")})},e.prototype.preventIncremental=function(){return!!this.get(["effect","show"])},e.prototype.getProgressive=function(){var t=this.option.progressive;return t??(this.option.large?1e4:this.get("progressive"))},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return t??(this.option.large?2e4:this.get("progressiveThreshold"))},e.prototype.getZLevelKey=function(){var t=this.getModel("effect"),a=t.get("trailLength");return this.getData().count()>this.getProgressiveThreshold()?this.id:t.get("show")&&a>0?a+"":""},e.type="series.lines",e.dependencies=["grid","polar","geo","calendar"],e.defaultOption={coordinateSystem:"geo",z:2,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,clip:!0,label:{show:!1,position:"end"},lineStyle:{opacity:.5}},e})(Se);function hp(r){return r instanceof Array||(r=[r,r]),r}var aJ={seriesType:"lines",reset:function(r){var e=hp(r.get("symbol")),t=hp(r.get("symbolSize")),a=r.getData();a.setVisual("fromSymbol",e&&e[0]),a.setVisual("toSymbol",e&&e[1]),a.setVisual("fromSymbolSize",t&&t[0]),a.setVisual("toSymbolSize",t&&t[1]);function n(i,o){var s=i.getItemModel(o),l=hp(s.getShallow("symbol",!0)),u=hp(s.getShallow("symbolSize",!0));l[0]&&i.setItemVisual(o,"fromSymbol",l[0]),l[1]&&i.setItemVisual(o,"toSymbol",l[1]),u[0]&&i.setItemVisual(o,"fromSymbolSize",u[0]),u[1]&&i.setItemVisual(o,"toSymbolSize",u[1])}return{dataEach:a.hasItemOption?n:null}}};function nJ(r){r.registerChartView(JQ),r.registerSeriesModel(rJ),r.registerLayout(ik),r.registerVisual(aJ)}var iJ=256,oJ=(function(){function r(){this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={inRange:null,outOfRange:null};var e=Mo.createCanvas();this.canvas=e}return r.prototype.update=function(e,t,a,n,i,o){var s=this._getBrush(),l=this._getGradient(i,"inRange"),u=this._getGradient(i,"outOfRange"),f=this.pointSize+this.blurSize,v=this.canvas,d=v.getContext("2d"),p=e.length;v.width=t,v.height=a;for(var y=0;y0){var k=o(w)?l:u;w>0&&(w=w*N+E),M[C++]=k[O],M[C++]=k[O+1],M[C++]=k[O+2],M[C++]=k[O+3]*w*256}else C+=4}return d.putImageData(A,0,0),v},r.prototype._getBrush=function(){var e=this._brushCanvas||(this._brushCanvas=Mo.createCanvas()),t=this.pointSize+this.blurSize,a=t*2;e.width=a,e.height=a;var n=e.getContext("2d");return n.clearRect(0,0,a,a),n.shadowOffsetX=a,n.shadowBlur=this.blurSize,n.shadowColor="#000",n.beginPath(),n.arc(-t,t,this.pointSize,0,Math.PI*2,!0),n.closePath(),n.fill(),e},r.prototype._getGradient=function(e,t){for(var a=this._gradientPixels,n=a[t]||(a[t]=new Uint8ClampedArray(256*4)),i=[0,0,0,0],o=0,s=0;s<256;s++)e[t](s/255,!0,i),n[o++]=i[0],n[o++]=i[1],n[o++]=i[2],n[o++]=i[3];return n},r})();function sJ(r,e,t){var a=r[1]-r[0];e=st(e,function(o){return{interval:[(o.interval[0]-r[0])/a,(o.interval[1]-r[0])/a]}});var n=e.length,i=0;return function(o){var s;for(s=i;s=0;s--){var l=e[s].interval;if(l[0]<=o&&o<=l[1]){i=s;break}}return s>=0&&s=e[0]&&a<=e[1]}}function m5(r){var e=r.dimensions;return e[0]==="lng"&&e[1]==="lat"}var uJ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){var i;a.eachComponent("visualMap",function(s){s.eachTargetSeries(function(l){l===t&&(i=s)})}),this._progressiveEls=null,this.group.removeAll();var o=t.coordinateSystem;o.type==="cartesian2d"||o.type==="calendar"?this._renderOnCartesianAndCalendar(t,n,0,t.getData().count()):m5(o)&&this._renderOnGeo(o,t,i,n)},e.prototype.incrementalPrepareRender=function(t,a,n){this.group.removeAll()},e.prototype.incrementalRender=function(t,a,n,i){var o=a.coordinateSystem;o&&(m5(o)?this.render(a,n,i):(this._progressiveEls=[],this._renderOnCartesianAndCalendar(a,i,t.start,t.end,!0)))},e.prototype.eachRendered=function(t){Oo(this._progressiveEls||this.group,t)},e.prototype._renderOnCartesianAndCalendar=function(t,a,n,i,o){var s=t.coordinateSystem,l=cl(s,"cartesian2d"),u,f,v,d;if(l){var p=s.getAxis("x"),y=s.getAxis("y");u=p.getBandWidth()+.5,f=y.getBandWidth()+.5,v=p.scale.getExtent(),d=y.scale.getExtent()}for(var m=this.group,_=t.getData(),S=t.getModel(["emphasis","itemStyle"]).getItemStyle(),b=t.getModel(["blur","itemStyle"]).getItemStyle(),w=t.getModel(["select","itemStyle"]).getItemStyle(),A=t.get(["itemStyle","borderRadius"]),M=nr(t),C=t.getModel("emphasis"),L=C.get("focus"),E=C.get("blurScope"),R=C.get("disabled"),N=l?[_.mapDimension("x"),_.mapDimension("y"),_.mapDimension("value")]:[_.mapDimension("time"),_.mapDimension("value")],O=n;Ov[1]||Fd[1])continue;var B=s.dataToPoint([H,F]);k=new Wt({shape:{x:B[0]-u/2,y:B[1]-f/2,width:u,height:f},style:G})}else{if(isNaN(_.get(N[1],O)))continue;k=new Wt({z2:1,shape:s.dataToRect([_.get(N[0],O)]).contentShape,style:G})}if(_.hasItemOption){var j=_.getItemModel(O),Y=j.getModel("emphasis");S=Y.getModel("itemStyle").getItemStyle(),b=j.getModel(["blur","itemStyle"]).getItemStyle(),w=j.getModel(["select","itemStyle"]).getItemStyle(),A=j.get(["itemStyle","borderRadius"]),L=Y.get("focus"),E=Y.get("blurScope"),R=Y.get("disabled"),M=nr(j)}k.shape.r=A;var K=t.getRawValue(O),nt="-";K&&K[2]!=null&&(nt=K[2]+""),Sr(k,M,{labelFetcher:t,labelDataIndex:O,defaultOpacity:G.opacity,defaultText:nt}),k.ensureState("emphasis").style=S,k.ensureState("blur").style=b,k.ensureState("select").style=w,Pe(k,L,E,R),k.incremental=o,o&&(k.states.emphasis.hoverLayer=!0),m.add(k),_.setItemGraphicEl(O,k),this._progressiveEls&&this._progressiveEls.push(k)}},e.prototype._renderOnGeo=function(t,a,n,i){var o=n.targetVisuals.inRange,s=n.targetVisuals.outOfRange,l=a.getData(),u=this._hmLayer||this._hmLayer||new oJ;u.blurSize=a.get("blurSize"),u.pointSize=a.get("pointSize"),u.minOpacity=a.get("minOpacity"),u.maxOpacity=a.get("maxOpacity");var f=t.getViewRect().clone(),v=t.getRoamTransform();f.applyTransform(v);var d=Math.max(f.x,0),p=Math.max(f.y,0),y=Math.min(f.width+f.x,i.getWidth()),m=Math.min(f.height+f.y,i.getHeight()),_=y-d,S=m-p,b=[l.mapDimension("lng"),l.mapDimension("lat"),l.mapDimension("value")],w=l.mapArray(b,function(L,E,R){var N=t.dataToPoint([L,E]);return N[0]-=d,N[1]-=p,N.push(R),N}),A=n.getExtent(),M=n.type==="visualMap.continuous"?lJ(A,n.option.range):sJ(A,n.getPieceList(),n.option.selected);u.update(w,_,S,o.color.getNormalizer(),{inRange:o.color.getColorMapper(),outOfRange:s.color.getColorMapper()},M);var C=new hr({style:{width:_,height:S,x:d,y:p,image:u.canvas},silent:!0});this.group.add(C)},e.type="heatmap",e})(de),cJ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.getInitialData=function(t,a){return Di(null,this,{generateCoord:"value"})},e.prototype.preventIncremental=function(){var t=Uh.get(this.get("coordinateSystem"));if(t&&t.dimensions)return t.dimensions[0]==="lng"&&t.dimensions[1]==="lat"},e.type="series.heatmap",e.dependencies=["grid","geo","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,geoIndex:0,blurSize:30,pointSize:20,maxOpacity:1,minOpacity:0,select:{itemStyle:{borderColor:"#212121"}}},e})(Se);function fJ(r){r.registerChartView(uJ),r.registerSeriesModel(cJ)}var hJ=["itemStyle","borderWidth"],_5=[{xy:"x",wh:"width",index:0,posDesc:["left","right"]},{xy:"y",wh:"height",index:1,posDesc:["top","bottom"]}],j_=new un,vJ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){var i=this.group,o=t.getData(),s=this._data,l=t.coordinateSystem,u=l.getBaseAxis(),f=u.isHorizontal(),v=l.master.getRect(),d={ecSize:{width:n.getWidth(),height:n.getHeight()},seriesModel:t,coordSys:l,coordSysExtent:[[v.x,v.x+v.width],[v.y,v.y+v.height]],isHorizontal:f,valueDim:_5[+f],categoryDim:_5[1-+f]};return o.diff(s).add(function(p){if(o.hasValue(p)){var y=S5(o,p),m=x5(o,p,y,d),_=b5(o,d,m);o.setItemGraphicEl(p,_),i.add(_),T5(_,d,m)}}).update(function(p,y){var m=s.getItemGraphicEl(y);if(!o.hasValue(p)){i.remove(m);return}var _=S5(o,p),S=x5(o,p,_,d),b=fk(o,S);m&&b!==m.__pictorialShapeStr&&(i.remove(m),o.setItemGraphicEl(p,null),m=null),m?xJ(m,d,S):m=b5(o,d,S,!0),o.setItemGraphicEl(p,m),m.__pictorialSymbolMeta=S,i.add(m),T5(m,d,S)}).remove(function(p){var y=s.getItemGraphicEl(p);y&&w5(s,p,y.__pictorialSymbolMeta.animationModel,y)}).execute(),this._data=o,this.group},e.prototype.remove=function(t,a){var n=this.group,i=this._data;t.get("animation")?i&&i.eachItemGraphicEl(function(o){w5(i,Rt(o).dataIndex,t,o)}):n.removeAll()},e.type="pictorialBar",e})(de);function x5(r,e,t,a){var n=r.getItemLayout(e),i=t.get("symbolRepeat"),o=t.get("symbolClip"),s=t.get("symbolPosition")||"start",l=t.get("symbolRotate"),u=(l||0)*Math.PI/180||0,f=t.get("symbolPatternSize")||2,v=t.isAnimationEnabled(),d={dataIndex:e,layout:n,itemModel:t,symbolType:r.getItemVisual(e,"symbol")||"circle",style:r.getItemVisual(e,"style"),symbolClip:o,symbolRepeat:i,symbolRepeatDirection:t.get("symbolRepeatDirection"),symbolPatternSize:f,rotation:u,animationModel:v?t:null,hoverScale:v&&t.get(["emphasis","scale"]),z2:t.getShallow("z",!0)||0};dJ(t,i,n,a,d),pJ(r,e,n,i,o,d.boundingLength,d.pxSign,f,a,d),gJ(t,d.symbolScale,u,a,d);var p=d.symbolSize,y=ll(t.get("symbolOffset"),p);return yJ(t,p,n,i,o,y,s,d.valueLineWidth,d.boundingLength,d.repeatCutLength,a,d),d}function dJ(r,e,t,a,n){var i=a.valueDim,o=r.get("symbolBoundingData"),s=a.coordSys.getOtherAxis(a.coordSys.getBaseAxis()),l=s.toGlobalCoord(s.dataToCoord(0)),u=1-+(t[i.wh]<=0),f;if(it(o)){var v=[Y_(s,o[0])-l,Y_(s,o[1])-l];v[1]0?1:-1}function Y_(r,e){return r.toGlobalCoord(r.dataToCoord(r.scale.parse(e)))}function pJ(r,e,t,a,n,i,o,s,l,u){var f=l.valueDim,v=l.categoryDim,d=Math.abs(t[v.wh]),p=r.getItemVisual(e,"symbolSize"),y;it(p)?y=p.slice():p==null?y=["100%","100%"]:y=[p,p],y[v.index]=ft(y[v.index],d),y[f.index]=ft(y[f.index],a?d:Math.abs(i)),u.symbolSize=y;var m=u.symbolScale=[y[0]/s,y[1]/s];m[f.index]*=(l.isHorizontal?-1:1)*o}function gJ(r,e,t,a,n){var i=r.get(hJ)||0;i&&(j_.attr({scaleX:e[0],scaleY:e[1],rotation:t}),j_.updateTransform(),i/=j_.getLineScale(),i*=e[a.valueDim.index]),n.valueLineWidth=i||0}function yJ(r,e,t,a,n,i,o,s,l,u,f,v){var d=f.categoryDim,p=f.valueDim,y=v.pxSign,m=Math.max(e[p.index]+s,0),_=m;if(a){var S=Math.abs(l),b=fr(r.get("symbolMargin"),"15%")+"",w=!1;b.lastIndexOf("!")===b.length-1&&(w=!0,b=b.slice(0,b.length-1));var A=ft(b,e[p.index]),M=Math.max(m+A*2,0),C=w?0:A*2,L=y3(a),E=L?a:A5((S+C)/M),R=S-E*m;A=R/2/(w?E:Math.max(E-1,1)),M=m+A*2,C=w?0:A*2,!L&&a!=="fixed"&&(E=u?A5((Math.abs(u)+C)/M):0),_=E*M-C,v.repeatTimes=E,v.symbolMargin=A}var N=y*(_/2),O=v.pathPosition=[];O[d.index]=t[d.wh]/2,O[p.index]=o==="start"?N:o==="end"?l-N:l/2,i&&(O[0]+=i[0],O[1]+=i[1]);var k=v.bundlePosition=[];k[d.index]=t[d.xy],k[p.index]=t[p.xy];var G=v.barRectShape=et({},t);G[p.wh]=y*Math.max(Math.abs(t[p.wh]),Math.abs(O[p.index]+N)),G[d.wh]=t[d.wh];var H=v.clipShape={};H[d.xy]=-t[d.xy],H[d.wh]=f.ecSize[d.wh],H[p.xy]=0,H[p.wh]=t[p.wh]}function ok(r){var e=r.symbolPatternSize,t=Ye(r.symbolType,-e/2,-e/2,e,e);return t.attr({culling:!0}),t.type!=="image"&&t.setStyle({strokeNoScale:!0}),t}function sk(r,e,t,a){var n=r.__pictorialBundle,i=t.symbolSize,o=t.valueLineWidth,s=t.pathPosition,l=e.valueDim,u=t.repeatTimes||0,f=0,v=i[e.valueDim.index]+o+t.symbolMargin*2;for(H2(r,function(m){m.__pictorialAnimationIndex=f,m.__pictorialRepeatTimes=u,f0:S<0)&&(b=u-1-m),_[l.index]=v*(b-u/2+.5)+s[l.index],{x:_[0],y:_[1],scaleX:t.symbolScale[0],scaleY:t.symbolScale[1],rotation:t.rotation}}}function lk(r,e,t,a){var n=r.__pictorialBundle,i=r.__pictorialMainPath;i?Ru(i,null,{x:t.pathPosition[0],y:t.pathPosition[1],scaleX:t.symbolScale[0],scaleY:t.symbolScale[1],rotation:t.rotation},t,a):(i=r.__pictorialMainPath=ok(t),n.add(i),Ru(i,{x:t.pathPosition[0],y:t.pathPosition[1],scaleX:0,scaleY:0,rotation:t.rotation},{scaleX:t.symbolScale[0],scaleY:t.symbolScale[1]},t,a))}function uk(r,e,t){var a=et({},e.barRectShape),n=r.__pictorialBarRect;n?Ru(n,null,{shape:a},e,t):(n=r.__pictorialBarRect=new Wt({z2:2,shape:a,silent:!0,style:{stroke:"transparent",fill:"transparent",lineWidth:0}}),n.disableMorphing=!0,r.add(n))}function ck(r,e,t,a){if(t.symbolClip){var n=r.__pictorialClipPath,i=et({},t.clipShape),o=e.valueDim,s=t.animationModel,l=t.dataIndex;if(n)Jt(n,{shape:i},s,l);else{i[o.wh]=0,n=new Wt({shape:i}),r.__pictorialBundle.setClipPath(n),r.__pictorialClipPath=n;var u={};u[o.wh]=t.clipShape[o.wh],Hh[a?"updateProps":"initProps"](n,{shape:u},s,l)}}}function S5(r,e){var t=r.getItemModel(e);return t.getAnimationDelayParams=mJ,t.isAnimationEnabled=_J,t}function mJ(r){return{index:r.__pictorialAnimationIndex,count:r.__pictorialRepeatTimes}}function _J(){return this.parentModel.isAnimationEnabled()&&!!this.getShallow("animation")}function b5(r,e,t,a){var n=new Ct,i=new Ct;return n.add(i),n.__pictorialBundle=i,i.x=t.bundlePosition[0],i.y=t.bundlePosition[1],t.symbolRepeat?sk(n,e,t):lk(n,e,t),uk(n,t,a),ck(n,e,t,a),n.__pictorialShapeStr=fk(r,t),n.__pictorialSymbolMeta=t,n}function xJ(r,e,t){var a=t.animationModel,n=t.dataIndex,i=r.__pictorialBundle;Jt(i,{x:t.bundlePosition[0],y:t.bundlePosition[1]},a,n),t.symbolRepeat?sk(r,e,t,!0):lk(r,e,t,!0),uk(r,t,!0),ck(r,e,t,!0)}function w5(r,e,t,a){var n=a.__pictorialBarRect;n&&n.removeTextContent();var i=[];H2(a,function(o){i.push(o)}),a.__pictorialMainPath&&i.push(a.__pictorialMainPath),a.__pictorialClipPath&&(t=null),P(i,function(o){Eo(o,{scaleX:0,scaleY:0},t,e,function(){a.parent&&a.parent.remove(a)})}),r.setItemGraphicEl(e,null)}function fk(r,e){return[r.getItemVisual(e.dataIndex,"symbol")||"none",!!e.symbolRepeat,!!e.symbolClip].join(":")}function H2(r,e,t){P(r.__pictorialBundle.children(),function(a){a!==r.__pictorialBarRect&&e.call(t,a)})}function Ru(r,e,t,a,n,i){e&&r.attr(e),a.symbolClip&&!n?t&&r.attr(t):t&&Hh[n?"updateProps":"initProps"](r,t,a.animationModel,a.dataIndex,i)}function T5(r,e,t){var a=t.dataIndex,n=t.itemModel,i=n.getModel("emphasis"),o=i.getModel("itemStyle").getItemStyle(),s=n.getModel(["blur","itemStyle"]).getItemStyle(),l=n.getModel(["select","itemStyle"]).getItemStyle(),u=n.getShallow("cursor"),f=i.get("focus"),v=i.get("blurScope"),d=i.get("scale");H2(r,function(m){if(m instanceof hr){var _=m.style;m.useStyle(et({image:_.image,x:_.x,y:_.y,width:_.width,height:_.height},t.style))}else m.useStyle(t.style);var S=m.ensureState("emphasis");S.style=o,d&&(S.scaleX=m.scaleX*1.1,S.scaleY=m.scaleY*1.1),m.ensureState("blur").style=s,m.ensureState("select").style=l,u&&(m.cursor=u),m.z2=t.z2});var p=e.valueDim.posDesc[+(t.boundingLength>0)],y=r.__pictorialBarRect;Sr(y,nr(n),{labelFetcher:e.seriesModel,labelDataIndex:a,defaultText:ku(e.seriesModel.getData(),a),inheritColor:t.style.fill,defaultOpacity:t.style.opacity,defaultOutsidePosition:p}),Pe(r,f,v,i.get("disabled"))}function A5(r){var e=Math.round(r);return Math.abs(r-e)<1e-4?e:Math.ceil(r)}var SJ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.hasSymbolVisual=!0,t.defaultSymbol="roundRect",t}return e.prototype.getInitialData=function(t){return t.stack=null,r.prototype.getInitialData.apply(this,arguments)},e.type="series.pictorialBar",e.dependencies=["grid"],e.defaultOption=zo(bh.defaultOption,{symbol:"circle",symbolSize:null,symbolRotate:null,symbolPosition:null,symbolOffset:null,symbolMargin:null,symbolRepeat:!1,symbolRepeatDirection:"end",symbolClip:!1,symbolBoundingData:null,symbolPatternSize:400,barGap:"-100%",progressive:0,emphasis:{scale:!1},select:{itemStyle:{borderColor:"#212121"}}}),e})(bh);function bJ(r){r.registerChartView(vJ),r.registerSeriesModel(SJ),r.registerLayout(r.PRIORITY.VISUAL.LAYOUT,It(KO,"pictorialBar")),r.registerLayout(r.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,QO("pictorialBar"))}var wJ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t._layers=[],t}return e.prototype.render=function(t,a,n){var i=t.getData(),o=this,s=this.group,l=t.getLayerSeries(),u=i.getLayout("layoutInfo"),f=u.rect,v=u.boundaryGap;s.x=0,s.y=f.y+v[0];function d(_){return _.name}var p=new Si(this._layersSeries||[],l,d,d),y=[];p.add(dt(m,this,"add")).update(dt(m,this,"update")).remove(dt(m,this,"remove")).execute();function m(_,S,b){var w=o._layers;if(_==="remove"){s.remove(w[S]);return}for(var A=[],M=[],C,L=l[S].indices,E=0;Ei&&(i=s),a.push(s)}for(var u=0;ui&&(i=v)}return{y0:n,max:i}}function MJ(r){r.registerChartView(wJ),r.registerSeriesModel(AJ),r.registerLayout(DJ),r.registerProcessor($h("themeRiver"))}var LJ=2,EJ=4,C5=(function(r){$(e,r);function e(t,a,n,i){var o=r.call(this)||this;o.z2=LJ,o.textConfig={inside:!0},Rt(o).seriesIndex=a.seriesIndex;var s=new $t({z2:EJ,silent:t.getModel().get(["label","silent"])});return o.setTextContent(s),o.updateData(!0,t,a,n,i),o}return e.prototype.updateData=function(t,a,n,i,o){this.node=a,a.piece=this,n=n||this._seriesModel,i=i||this._ecModel;var s=this;Rt(s).dataIndex=a.dataIndex;var l=a.getModel(),u=l.getModel("emphasis"),f=a.getLayout(),v=et({},f);v.label=null;var d=a.getVisual("style");d.lineJoin="bevel";var p=a.getVisual("decal");p&&(d.decal=Ou(p,o));var y=Us(l.getModel("itemStyle"),v,!0);et(v,y),P(kr,function(b){var w=s.ensureState(b),A=l.getModel([b,"itemStyle"]);w.style=A.getItemStyle();var M=Us(A,v);M&&(w.shape=M)}),t?(s.setShape(v),s.shape.r=f.r0,Le(s,{shape:{r:f.r}},n,a.dataIndex)):(Jt(s,{shape:v},n),cn(s)),s.useStyle(d),this._updateLabel(n);var m=l.getShallow("cursor");m&&s.attr("cursor",m),this._seriesModel=n||this._seriesModel,this._ecModel=i||this._ecModel;var _=u.get("focus"),S=_==="ancestor"?a.getAncestorsIndices():_==="descendant"?a.getDescendantIndices():_;Pe(this,S,u.get("blurScope"),u.get("disabled"))},e.prototype._updateLabel=function(t){var a=this,n=this.node.getModel(),i=n.getModel("label"),o=this.node.getLayout(),s=o.endAngle-o.startAngle,l=(o.startAngle+o.endAngle)/2,u=Math.cos(l),f=Math.sin(l),v=this,d=v.getTextContent(),p=this.node.dataIndex,y=i.get("minAngle")/180*Math.PI,m=i.get("show")&&!(y!=null&&Math.abs(s)Math.PI/2?"right":"left"):!k||k==="center"?(s===2*Math.PI&&o.r0===0?N=0:N=(o.r+o.r0)/2,k="center"):k==="left"?(N=o.r0+O,l>Math.PI/2&&(k="right")):k==="right"&&(N=o.r-O,l>Math.PI/2&&(k="left")),A.style.align=k,A.style.verticalAlign=_(b,"verticalAlign")||"middle",A.x=N*u+o.cx,A.y=N*f+o.cy;var G=_(b,"rotate"),H=0;G==="radial"?(H=an(-l),H>Math.PI/2&&HMath.PI/2?H-=Math.PI:H<-Math.PI/2&&(H+=Math.PI)):Qt(G)&&(H=G*Math.PI/180),A.rotation=an(H)});function _(S,b){var w=S.get(b);return w??i.get(b)}d.dirtyStyle()},e})(Br),FS="sunburstRootToNode",M5="sunburstHighlight",RJ="sunburstUnhighlight";function IJ(r){r.registerAction({type:FS,update:"updateView"},function(e,t){t.eachComponent({mainType:"series",subType:"sunburst",query:e},a);function a(n,i){var o=Th(e,[FS],n);if(o){var s=n.getViewRoot();s&&(e.direction=C2(s,o.node)?"rollUp":"drillDown"),n.resetViewRoot(o.node)}}}),r.registerAction({type:M5,update:"none"},function(e,t,a){e=et({},e),t.eachComponent({mainType:"series",subType:"sunburst",query:e},n);function n(i){var o=Th(e,[M5],i);o&&(e.dataIndex=o.node.dataIndex)}a.dispatchAction(et(e,{type:"highlight"}))}),r.registerAction({type:RJ,update:"updateView"},function(e,t,a){e=et({},e),a.dispatchAction(et(e,{type:"downplay"}))})}var NJ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n,i){var o=this;this.seriesModel=t,this.api=n,this.ecModel=a;var s=t.getData(),l=s.tree.root,u=t.getViewRoot(),f=this.group,v=t.get("renderLabelForZeroData"),d=[];u.eachNode(function(b){d.push(b)});var p=this._oldChildren||[];y(d,p),S(l,u),this._initEvents(),this._oldChildren=d;function y(b,w){if(b.length===0&&w.length===0)return;new Si(w,b,A,A).add(M).update(M).remove(It(M,null)).execute();function A(C){return C.getId()}function M(C,L){var E=C==null?null:b[C],R=L==null?null:w[L];m(E,R)}}function m(b,w){if(!v&&b&&!b.getValue()&&(b=null),b!==l&&w!==l){if(w&&w.piece)b?(w.piece.updateData(!1,b,t,a,n),s.setItemGraphicEl(b.dataIndex,w.piece)):_(w);else if(b){var A=new C5(b,t,a,n);f.add(A),s.setItemGraphicEl(b.dataIndex,A)}}}function _(b){b&&b.piece&&(f.remove(b.piece),b.piece=null)}function S(b,w){w.depth>0?(o.virtualPiece?o.virtualPiece.updateData(!1,b,t,a,n):(o.virtualPiece=new C5(b,t,a,n),f.add(o.virtualPiece)),w.piece.off("click"),o.virtualPiece.on("click",function(A){o._rootToNode(w.parentNode)})):o.virtualPiece&&(f.remove(o.virtualPiece),o.virtualPiece=null)}},e.prototype._initEvents=function(){var t=this;this.group.off("click"),this.group.on("click",function(a){var n=!1,i=t.seriesModel.getViewRoot();i.eachNode(function(o){if(!n&&o.piece&&o.piece===a.target){var s=o.getModel().get("nodeClick");if(s==="rootToNode")t._rootToNode(o);else if(s==="link"){var l=o.getModel(),u=l.get("link");if(u){var f=l.get("target",!0)||"_blank";ug(u,f)}}n=!0}})})},e.prototype._rootToNode=function(t){t!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:FS,from:this.uid,seriesId:this.seriesModel.id,targetNode:t})},e.prototype.containPoint=function(t,a){var n=a.getData(),i=n.getItemLayout(0);if(i){var o=t[0]-i.cx,s=t[1]-i.cy,l=Math.sqrt(o*o+s*s);return l<=i.r&&l>=i.r0}},e.type="sunburst",e})(de),PJ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.ignoreStyleOnData=!0,t}return e.prototype.getInitialData=function(t,a){var n={name:t.name,children:t.data};hk(n);var i=this._levelModels=st(t.levels||[],function(l){return new oe(l,this,a)},this),o=D2.createTree(n,this,s);function s(l){l.wrapMethod("getItemModel",function(u,f){var v=o.getNodeByDataIndex(f),d=i[v.depth];return d&&(u.parentModel=d),u})}return o.data},e.prototype.optionUpdated=function(){this.resetViewRoot()},e.prototype.getDataParams=function(t){var a=r.prototype.getDataParams.apply(this,arguments),n=this.getData().tree.getNodeByDataIndex(t);return a.treePathInfo=Ty(n,this),a},e.prototype.getLevelModel=function(t){return this._levelModels&&this._levelModels[t.depth]},e.prototype.getViewRoot=function(){return this._viewRoot},e.prototype.resetViewRoot=function(t){t?this._viewRoot=t:t=this._viewRoot;var a=this.getRawData().tree.root;(!t||t!==a&&!a.contains(t))&&(this._viewRoot=a)},e.prototype.enableAriaDecal=function(){yz(this)},e.type="series.sunburst",e.defaultOption={z:2,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,stillShowZeroSum:!0,nodeClick:"rootToNode",renderLabelForZeroData:!1,label:{rotate:"radial",show:!0,opacity:1,align:"center",position:"inside",distance:5,silent:!0},itemStyle:{borderWidth:1,borderColor:"white",borderType:"solid",shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0.2)",shadowOffsetX:0,shadowOffsetY:0,opacity:1},emphasis:{focus:"descendant"},blur:{itemStyle:{opacity:.2},label:{opacity:.1}},animationType:"expansion",animationDuration:1e3,animationDurationUpdate:500,data:[],sort:"desc"},e})(Se);function hk(r){var e=0;P(r.children,function(a){hk(a);var n=a.value;it(n)&&(n=n[0]),e+=n});var t=r.value;it(t)&&(t=t[0]),(t==null||isNaN(t))&&(t=e),t<0&&(t=0),it(r.value)?r.value[0]=t:r.value=t}var L5=Math.PI/180;function OJ(r,e,t){e.eachSeriesByType(r,function(a){var n=a.get("center"),i=a.get("radius");it(i)||(i=[0,i]),it(n)||(n=[n,n]);var o=t.getWidth(),s=t.getHeight(),l=Math.min(o,s),u=ft(n[0],o),f=ft(n[1],s),v=ft(i[0],l/2),d=ft(i[1],l/2),p=-a.get("startAngle")*L5,y=a.get("minAngle")*L5,m=a.getData().tree.root,_=a.getViewRoot(),S=_.depth,b=a.get("sort");b!=null&&vk(_,b);var w=0;P(_.children,function(B){!isNaN(B.getValue())&&w++});var A=_.getValue(),M=Math.PI/(A||w)*2,C=_.depth>0,L=_.height-(C?-1:1),E=(d-v)/(L||1),R=a.get("clockwise"),N=a.get("stillShowZeroSum"),O=R?1:-1,k=function(B,j){if(B){var Y=j;if(B!==m){var K=B.getValue(),nt=A===0&&N?M:K*M;nt1;)o=o.parentNode;var s=n.getColorFromPalette(o.name||o.dataIndex+"",e);return a.depth>1&&vt(s)&&(s=Nx(s,(a.depth-1)/(i-1)*.5)),s}r.eachSeriesByType("sunburst",function(a){var n=a.getData(),i=n.tree;i.eachNode(function(o){var s=o.getModel(),l=s.getModel("itemStyle").getItemStyle();l.fill||(l.fill=t(o,a,i.root.height));var u=n.ensureUniqueItemVisual(o.dataIndex,"style");et(u,l)})})}function BJ(r){r.registerChartView(NJ),r.registerSeriesModel(PJ),r.registerLayout(It(OJ,"sunburst")),r.registerProcessor(It($h,"sunburst")),r.registerVisual(kJ),IJ(r)}var E5={color:"fill",borderColor:"stroke"},VJ={symbol:1,symbolSize:1,symbolKeepAspect:1,legendIcon:1,visualMeta:1,liftZ:1,decal:1},pi=Kt(),GJ=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.optionUpdated=function(){this.currentZLevel=this.get("zlevel",!0),this.currentZ=this.get("z",!0)},e.prototype.getInitialData=function(t,a){return Di(null,this)},e.prototype.getDataParams=function(t,a,n){var i=r.prototype.getDataParams.call(this,t,a);return n&&(i.info=pi(n).info),i},e.type="series.custom",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,clip:!1},e})(Se);function HJ(r,e){return e=e||[0,0],st(["x","y"],function(t,a){var n=this.getAxis(t),i=e[a],o=r[a]/2;return n.type==="category"?n.getBandWidth():Math.abs(n.dataToCoord(i-o)-n.dataToCoord(i+o))},this)}function UJ(r){var e=r.master.getRect();return{coordSys:{type:"cartesian2d",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:function(t){return r.dataToPoint(t)},size:dt(HJ,r)}}}function FJ(r,e){return e=e||[0,0],st([0,1],function(t){var a=e[t],n=r[t]/2,i=[],o=[];return i[t]=a-n,o[t]=a+n,i[1-t]=o[1-t]=e[1-t],Math.abs(this.dataToPoint(i)[t]-this.dataToPoint(o)[t])},this)}function jJ(r){var e=r.getBoundingRect();return{coordSys:{type:"geo",x:e.x,y:e.y,width:e.width,height:e.height,zoom:r.getZoom()},api:{coord:function(t){return r.dataToPoint(t)},size:dt(FJ,r)}}}function YJ(r,e){var t=this.getAxis(),a=e instanceof Array?e[0]:e,n=(r instanceof Array?r[0]:r)/2;return t.type==="category"?t.getBandWidth():Math.abs(t.dataToCoord(a-n)-t.dataToCoord(a+n))}function XJ(r){var e=r.getRect();return{coordSys:{type:"singleAxis",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:function(t){return r.dataToPoint(t)},size:dt(YJ,r)}}}function ZJ(r,e){return e=e||[0,0],st(["Radius","Angle"],function(t,a){var n="get"+t+"Axis",i=this[n](),o=e[a],s=r[a]/2,l=i.type==="category"?i.getBandWidth():Math.abs(i.dataToCoord(o-s)-i.dataToCoord(o+s));return t==="Angle"&&(l=l*Math.PI/180),l},this)}function WJ(r){var e=r.getRadiusAxis(),t=r.getAngleAxis(),a=e.getExtent();return a[0]>a[1]&&a.reverse(),{coordSys:{type:"polar",cx:r.cx,cy:r.cy,r:a[1],r0:a[0]},api:{coord:function(n){var i=e.dataToRadius(n[0]),o=t.dataToAngle(n[1]),s=r.coordToPoint([i,o]);return s.push(i,o*Math.PI/180),s},size:dt(ZJ,r)}}}function qJ(r){var e=r.getRect(),t=r.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:r.getCellWidth(),cellHeight:r.getCellHeight(),rangeInfo:{start:t.start,end:t.end,weeks:t.weeks,dayCount:t.allDay}},api:{coord:function(a,n){return r.dataToPoint(a,n)}}}}function dk(r,e,t,a){return r&&(r.legacy||r.legacy!==!1&&!t&&!a&&e!=="tspan"&&(e==="text"||pt(r,"text")))}function pk(r,e,t){var a=r,n,i,o;if(e==="text")o=a;else{o={},pt(a,"text")&&(o.text=a.text),pt(a,"rich")&&(o.rich=a.rich),pt(a,"textFill")&&(o.fill=a.textFill),pt(a,"textStroke")&&(o.stroke=a.textStroke),pt(a,"fontFamily")&&(o.fontFamily=a.fontFamily),pt(a,"fontSize")&&(o.fontSize=a.fontSize),pt(a,"fontStyle")&&(o.fontStyle=a.fontStyle),pt(a,"fontWeight")&&(o.fontWeight=a.fontWeight),i={type:"text",style:o,silent:!0},n={};var s=pt(a,"textPosition");t?n.position=s?a.textPosition:"inside":s&&(n.position=a.textPosition),pt(a,"textPosition")&&(n.position=a.textPosition),pt(a,"textOffset")&&(n.offset=a.textOffset),pt(a,"textRotation")&&(n.rotation=a.textRotation),pt(a,"textDistance")&&(n.distance=a.textDistance)}return R5(o,r),P(o.rich,function(l){R5(l,l)}),{textConfig:n,textContent:i}}function R5(r,e){e&&(e.font=e.textFont||e.font,pt(e,"textStrokeWidth")&&(r.lineWidth=e.textStrokeWidth),pt(e,"textAlign")&&(r.align=e.textAlign),pt(e,"textVerticalAlign")&&(r.verticalAlign=e.textVerticalAlign),pt(e,"textLineHeight")&&(r.lineHeight=e.textLineHeight),pt(e,"textWidth")&&(r.width=e.textWidth),pt(e,"textHeight")&&(r.height=e.textHeight),pt(e,"textBackgroundColor")&&(r.backgroundColor=e.textBackgroundColor),pt(e,"textPadding")&&(r.padding=e.textPadding),pt(e,"textBorderColor")&&(r.borderColor=e.textBorderColor),pt(e,"textBorderWidth")&&(r.borderWidth=e.textBorderWidth),pt(e,"textBorderRadius")&&(r.borderRadius=e.textBorderRadius),pt(e,"textBoxShadowColor")&&(r.shadowColor=e.textBoxShadowColor),pt(e,"textBoxShadowBlur")&&(r.shadowBlur=e.textBoxShadowBlur),pt(e,"textBoxShadowOffsetX")&&(r.shadowOffsetX=e.textBoxShadowOffsetX),pt(e,"textBoxShadowOffsetY")&&(r.shadowOffsetY=e.textBoxShadowOffsetY))}function I5(r,e,t){var a=r;a.textPosition=a.textPosition||t.position||"inside",t.offset!=null&&(a.textOffset=t.offset),t.rotation!=null&&(a.textRotation=t.rotation),t.distance!=null&&(a.textDistance=t.distance);var n=a.textPosition.indexOf("inside")>=0,i=r.fill||"#000";N5(a,e);var o=a.textFill==null;return n?o&&(a.textFill=t.insideFill||"#fff",!a.textStroke&&t.insideStroke&&(a.textStroke=t.insideStroke),!a.textStroke&&(a.textStroke=i),a.textStrokeWidth==null&&(a.textStrokeWidth=2)):(o&&(a.textFill=r.fill||t.outsideFill||"#000"),!a.textStroke&&t.outsideStroke&&(a.textStroke=t.outsideStroke)),a.text=e.text,a.rich=e.rich,P(e.rich,function(s){N5(s,s)}),a}function N5(r,e){e&&(pt(e,"fill")&&(r.textFill=e.fill),pt(e,"stroke")&&(r.textStroke=e.fill),pt(e,"lineWidth")&&(r.textStrokeWidth=e.lineWidth),pt(e,"font")&&(r.font=e.font),pt(e,"fontStyle")&&(r.fontStyle=e.fontStyle),pt(e,"fontWeight")&&(r.fontWeight=e.fontWeight),pt(e,"fontSize")&&(r.fontSize=e.fontSize),pt(e,"fontFamily")&&(r.fontFamily=e.fontFamily),pt(e,"align")&&(r.textAlign=e.align),pt(e,"verticalAlign")&&(r.textVerticalAlign=e.verticalAlign),pt(e,"lineHeight")&&(r.textLineHeight=e.lineHeight),pt(e,"width")&&(r.textWidth=e.width),pt(e,"height")&&(r.textHeight=e.height),pt(e,"backgroundColor")&&(r.textBackgroundColor=e.backgroundColor),pt(e,"padding")&&(r.textPadding=e.padding),pt(e,"borderColor")&&(r.textBorderColor=e.borderColor),pt(e,"borderWidth")&&(r.textBorderWidth=e.borderWidth),pt(e,"borderRadius")&&(r.textBorderRadius=e.borderRadius),pt(e,"shadowColor")&&(r.textBoxShadowColor=e.shadowColor),pt(e,"shadowBlur")&&(r.textBoxShadowBlur=e.shadowBlur),pt(e,"shadowOffsetX")&&(r.textBoxShadowOffsetX=e.shadowOffsetX),pt(e,"shadowOffsetY")&&(r.textBoxShadowOffsetY=e.shadowOffsetY),pt(e,"textShadowColor")&&(r.textShadowColor=e.textShadowColor),pt(e,"textShadowBlur")&&(r.textShadowBlur=e.textShadowBlur),pt(e,"textShadowOffsetX")&&(r.textShadowOffsetX=e.textShadowOffsetX),pt(e,"textShadowOffsetY")&&(r.textShadowOffsetY=e.textShadowOffsetY))}var gk={position:["x","y"],scale:["scaleX","scaleY"],origin:["originX","originY"]},P5=Yt(gk);Nn(On,function(r,e){return r[e]=1,r},{});On.join(", ");var Lg=["","style","shape","extra"],Gu=Kt();function U2(r,e,t,a,n){var i=r+"Animation",o=Zu(r,a,n)||{},s=Gu(e).userDuring;return o.duration>0&&(o.during=s?dt(ttt,{el:e,userDuring:s}):null,o.setToFinal=!0,o.scope=r),et(o,t[i]),o}function Vp(r,e,t,a){a=a||{};var n=a.dataIndex,i=a.isInit,o=a.clearStyle,s=t.isAnimationEnabled(),l=Gu(r),u=e.style;l.userDuring=e.during;var f={},v={};if(rtt(r,e,v),z5("shape",e,v),z5("extra",e,v),!i&&s&&(ett(r,e,f),O5("shape",r,e,f),O5("extra",r,e,f),att(r,e,u,f)),v.style=u,$J(r,v,o),QJ(r,e),s)if(i){var d={};P(Lg,function(y){var m=y?e[y]:e;m&&m.enterFrom&&(y&&(d[y]=d[y]||{}),et(y?d[y]:d,m.enterFrom))});var p=U2("enter",r,e,t,n);p.duration>0&&r.animateFrom(d,p)}else KJ(r,e,n||0,t,f);yk(r,e),u?r.dirty():r.markRedraw()}function yk(r,e){for(var t=Gu(r).leaveToProps,a=0;a0&&r.animateFrom(n,i)}}function QJ(r,e){pt(e,"silent")&&(r.silent=e.silent),pt(e,"ignore")&&(r.ignore=e.ignore),r instanceof Fa&&pt(e,"invisible")&&(r.invisible=e.invisible),r instanceof Ut&&pt(e,"autoBatch")&&(r.autoBatch=e.autoBatch)}var bn={},JJ={setTransform:function(r,e){return bn.el[r]=e,this},getTransform:function(r){return bn.el[r]},setShape:function(r,e){var t=bn.el,a=t.shape||(t.shape={});return a[r]=e,t.dirtyShape&&t.dirtyShape(),this},getShape:function(r){var e=bn.el.shape;if(e)return e[r]},setStyle:function(r,e){var t=bn.el,a=t.style;return a&&(a[r]=e,t.dirtyStyle&&t.dirtyStyle()),this},getStyle:function(r){var e=bn.el.style;if(e)return e[r]},setExtra:function(r,e){var t=bn.el.extra||(bn.el.extra={});return t[r]=e,this},getExtra:function(r){var e=bn.el.extra;if(e)return e[r]}};function ttt(){var r=this,e=r.el;if(e){var t=Gu(e).userDuring,a=r.userDuring;if(t!==a){r.el=r.userDuring=null;return}bn.el=e,a(JJ)}}function O5(r,e,t,a){var n=t[r];if(n){var i=e[r],o;if(i){var s=t.transition,l=n.transition;if(l)if(!o&&(o=a[r]={}),Ks(l))et(o,i);else for(var u=he(l),f=0;f=0){!o&&(o=a[r]={});for(var p=Yt(i),f=0;f=0)){var d=r.getAnimationStyleProps(),p=d?d.style:null;if(p){!i&&(i=a.style={});for(var y=Yt(t),u=0;u=0?e.getStore().get(j,F):void 0}var Y=e.get(B.name,F),K=B&&B.ordinalMeta;return K?K.categories[Y]:Y}function C(H,F){F==null&&(F=u);var B=e.getItemVisual(F,"style"),j=B&&B.fill,Y=B&&B.opacity,K=b(F,xo).getItemStyle();j!=null&&(K.fill=j),Y!=null&&(K.opacity=Y);var nt={inheritColor:vt(j)?j:"#000"},U=w(F,xo),W=xe(U,null,nt,!1,!0);W.text=U.getShallow("show")?Ot(r.getFormattedLabel(F,xo),ku(e,F)):null;var rt=sg(U,nt,!1);return R(H,K),K=I5(K,W,rt),H&&E(K,H),K.legacy=!0,K}function L(H,F){F==null&&(F=u);var B=b(F,gi).getItemStyle(),j=w(F,gi),Y=xe(j,null,null,!0,!0);Y.text=j.getShallow("show")?Rn(r.getFormattedLabel(F,gi),r.getFormattedLabel(F,xo),ku(e,F)):null;var K=sg(j,null,!0);return R(H,B),B=I5(B,Y,K),H&&E(B,H),B.legacy=!0,B}function E(H,F){for(var B in F)pt(F,B)&&(H[B]=F[B])}function R(H,F){H&&(H.textFill&&(F.textFill=H.textFill),H.textPosition&&(F.textPosition=H.textPosition))}function N(H,F){if(F==null&&(F=u),pt(E5,H)){var B=e.getItemVisual(F,"style");return B?B[E5[H]]:null}if(pt(VJ,H))return e.getItemVisual(F,H)}function O(H){if(i.type==="cartesian2d"){var F=i.getBaseAxis();return nY(wt({axis:F},H))}}function k(){return t.getCurrentSeriesIndices()}function G(H){return uP(H,t)}}function vtt(r){var e={};return P(r.dimensions,function(t){var a=r.getDimensionInfo(t);if(!a.isExtraCoord){var n=a.coordDim,i=e[n]=e[n]||[];i[a.coordDimIndex]=r.getDimensionIndex(t)}}),e}function q_(r,e,t,a,n,i,o){if(!a){i.remove(e);return}var s=Z2(r,e,t,a,n,i);return s&&o.setItemGraphicEl(t,s),s&&Pe(s,a.focus,a.blurScope,a.emphasisDisabled),s}function Z2(r,e,t,a,n,i){var o=-1,s=e;e&&Sk(e,a,n)&&(o=Vt(i.childrenRef(),e),e=null);var l=!e,u=e;u?u.clearStates():(u=Y2(a),s&&utt(s,u)),a.morph===!1?u.disableMorphing=!0:u.disableMorphing&&(u.disableMorphing=!1),Ea.normal.cfg=Ea.normal.conOpt=Ea.emphasis.cfg=Ea.emphasis.conOpt=Ea.blur.cfg=Ea.blur.conOpt=Ea.select.cfg=Ea.select.conOpt=null,Ea.isLegacy=!1,ptt(u,t,a,n,l,Ea),dtt(u,t,a,n,l),X2(r,u,t,a,Ea,n,l),pt(a,"info")&&(pi(u).info=a.info);for(var f=0;f=0?i.replaceAt(u,o):i.add(u),u}function Sk(r,e,t){var a=pi(r),n=e.type,i=e.shape,o=e.style;return t.isUniversalTransitionEnabled()||n!=null&&n!==a.customGraphicType||n==="path"&&xtt(i)&&bk(i)!==a.customPathData||n==="image"&&pt(o,"image")&&o.image!==a.customImagePath}function dtt(r,e,t,a,n){var i=t.clipPath;if(i===!1)r&&r.getClipPath()&&r.removeClipPath();else if(i){var o=r.getClipPath();o&&Sk(o,i,a)&&(o=null),o||(o=Y2(i),r.setClipPath(o)),X2(null,o,e,i,null,a,n)}}function ptt(r,e,t,a,n,i){if(!r.isGroup){B5(t,null,i),B5(t,gi,i);var o=i.normal.conOpt,s=i.emphasis.conOpt,l=i.blur.conOpt,u=i.select.conOpt;if(o!=null||s!=null||u!=null||l!=null){var f=r.getTextContent();if(o===!1)f&&r.removeTextContent();else{o=i.normal.conOpt=o||{type:"text"},f?f.clearStates():(f=Y2(o),r.setTextContent(f)),X2(null,f,e,o,null,a,n);for(var v=o&&o.style,d=0;d=f;p--){var y=e.childAt(p);ytt(e,y,n)}}}function ytt(r,e,t){e&&Cy(e,pi(r).option,t)}function mtt(r){new Si(r.oldChildren,r.newChildren,V5,V5,r).add(G5).update(G5).remove(_tt).execute()}function V5(r,e){var t=r&&r.name;return t??stt+e}function G5(r,e){var t=this.context,a=r!=null?t.newChildren[r]:null,n=e!=null?t.oldChildren[e]:null;Z2(t.api,n,t.dataIndex,a,t.seriesModel,t.group)}function _tt(r){var e=this.context,t=e.oldChildren[r];t&&Cy(t,pi(t).option,e.seriesModel)}function bk(r){return r&&(r.pathData||r.d)}function xtt(r){return r&&(pt(r,"pathData")||pt(r,"d"))}function Stt(r){r.registerChartView(ctt),r.registerSeriesModel(GJ)}var Ns=Kt(),H5=Dt,$_=dt,q2=(function(){function r(){this._dragging=!1,this.animationThreshold=15}return r.prototype.render=function(e,t,a,n){var i=t.get("value"),o=t.get("status");if(this._axisModel=e,this._axisPointerModel=t,this._api=a,!(!n&&this._lastValue===i&&this._lastStatus===o)){this._lastValue=i,this._lastStatus=o;var s=this._group,l=this._handle;if(!o||o==="hide"){s&&s.hide(),l&&l.hide();return}s&&s.show(),l&&l.show();var u={};this.makeElOption(u,i,e,t,a);var f=u.graphicKey;f!==this._lastGraphicKey&&this.clear(a),this._lastGraphicKey=f;var v=this._moveAnimation=this.determineAnimation(e,t);if(!s)s=this._group=new Ct,this.createPointerEl(s,u,e,t),this.createLabelEl(s,u,e,t),a.getZr().add(s);else{var d=It(U5,t,v);this.updatePointerEl(s,u,d),this.updateLabelEl(s,u,d,t)}j5(s,t,!0),this._renderHandle(i)}},r.prototype.remove=function(e){this.clear(e)},r.prototype.dispose=function(e){this.clear(e)},r.prototype.determineAnimation=function(e,t){var a=t.get("animation"),n=e.axis,i=n.type==="category",o=t.get("snap");if(!o&&!i)return!1;if(a==="auto"||a==null){var s=this.animationThreshold;if(i&&n.getBandWidth()>s)return!0;if(o){var l=_2(e).seriesDataCount,u=n.getExtent();return Math.abs(u[0]-u[1])/l>s}return!1}return a===!0},r.prototype.makeElOption=function(e,t,a,n,i){},r.prototype.createPointerEl=function(e,t,a,n){var i=t.pointer;if(i){var o=Ns(e).pointerEl=new Hh[i.type](H5(t.pointer));e.add(o)}},r.prototype.createLabelEl=function(e,t,a,n){if(t.label){var i=Ns(e).labelEl=new $t(H5(t.label));e.add(i),F5(i,n)}},r.prototype.updatePointerEl=function(e,t,a){var n=Ns(e).pointerEl;n&&t.pointer&&(n.setStyle(t.pointer.style),a(n,{shape:t.pointer.shape}))},r.prototype.updateLabelEl=function(e,t,a,n){var i=Ns(e).labelEl;i&&(i.setStyle(t.label.style),a(i,{x:t.label.x,y:t.label.y}),F5(i,n))},r.prototype._renderHandle=function(e){if(!(this._dragging||!this.updateHandleTransform)){var t=this._axisPointerModel,a=this._api.getZr(),n=this._handle,i=t.getModel("handle"),o=t.get("status");if(!i.get("show")||!o||o==="hide"){n&&a.remove(n),this._handle=null;return}var s;this._handle||(s=!0,n=this._handle=Gh(i.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(u){yi(u.event)},onmousedown:$_(this._onHandleDragMove,this,0,0),drift:$_(this._onHandleDragMove,this),ondragend:$_(this._onHandleDragEnd,this)}),a.add(n)),j5(n,t,!1),n.setStyle(i.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var l=i.get("size");it(l)||(l=[l,l]),n.scaleX=l[0]/2,n.scaleY=l[1]/2,ec(this,"_doDispatchAxisPointer",i.get("throttle")||0,"fixRate"),this._moveHandleToValue(e,s)}},r.prototype._moveHandleToValue=function(e,t){U5(this._axisPointerModel,!t&&this._moveAnimation,this._handle,K_(this.getHandleTransform(e,this._axisModel,this._axisPointerModel)))},r.prototype._onHandleDragMove=function(e,t){var a=this._handle;if(a){this._dragging=!0;var n=this.updateHandleTransform(K_(a),[e,t],this._axisModel,this._axisPointerModel);this._payloadInfo=n,a.stopAnimation(),a.attr(K_(n)),Ns(a).lastProp=null,this._doDispatchAxisPointer()}},r.prototype._doDispatchAxisPointer=function(){var e=this._handle;if(e){var t=this._payloadInfo,a=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:a.axis.dim,axisIndex:a.componentIndex}]})}},r.prototype._onHandleDragEnd=function(){this._dragging=!1;var e=this._handle;if(e){var t=this._axisPointerModel.get("value");this._moveHandleToValue(t),this._api.dispatchAction({type:"hideTip"})}},r.prototype.clear=function(e){this._lastValue=null,this._lastStatus=null;var t=e.getZr(),a=this._group,n=this._handle;t&&a&&(this._lastGraphicKey=null,a&&t.remove(a),n&&t.remove(n),this._group=null,this._handle=null,this._payloadInfo=null),gh(this,"_doDispatchAxisPointer")},r.prototype.doClear=function(){},r.prototype.buildLabel=function(e,t,a){return a=a||0,{x:e[a],y:e[1-a],width:t[a],height:t[1-a]}},r})();function U5(r,e,t,a){wk(Ns(t).lastProp,a)||(Ns(t).lastProp=a,e?Jt(t,a,r):(t.stopAnimation(),t.attr(a)))}function wk(r,e){if(Tt(r)&&Tt(e)){var t=!0;return P(e,function(a,n){t=t&&wk(r[n],a)}),!!t}else return r===e}function F5(r,e){r[e.get(["label","show"])?"show":"hide"]()}function K_(r){return{x:r.x||0,y:r.y||0,rotation:r.rotation||0}}function j5(r,e,t){var a=e.get("z"),n=e.get("zlevel");r&&r.traverse(function(i){i.type!=="group"&&(a!=null&&(i.z=a),n!=null&&(i.zlevel=n),i.silent=t)})}function $2(r){var e=r.get("type"),t=r.getModel(e+"Style"),a;return e==="line"?(a=t.getLineStyle(),a.fill=null):e==="shadow"&&(a=t.getAreaStyle(),a.stroke=null),a}function Tk(r,e,t,a,n){var i=t.get("value"),o=Ak(i,e.axis,e.ecModel,t.get("seriesDataIndices"),{precision:t.get(["label","precision"]),formatter:t.get(["label","formatter"])}),s=t.getModel("label"),l=Ku(s.get("padding")||0),u=s.getFont(),f=Nh(o,u),v=n.position,d=f.width+l[1]+l[3],p=f.height+l[0]+l[2],y=n.align;y==="right"&&(v[0]-=d),y==="center"&&(v[0]-=d/2);var m=n.verticalAlign;m==="bottom"&&(v[1]-=p),m==="middle"&&(v[1]-=p/2),btt(v,d,p,a);var _=s.get("backgroundColor");(!_||_==="auto")&&(_=e.get(["axisLine","lineStyle","color"])),r.label={x:v[0],y:v[1],style:xe(s,{text:o,font:u,fill:s.getTextColor(),padding:l,backgroundColor:_}),z2:10}}function btt(r,e,t,a){var n=a.getWidth(),i=a.getHeight();r[0]=Math.min(r[0]+e,n)-e,r[1]=Math.min(r[1]+t,i)-t,r[0]=Math.max(r[0],0),r[1]=Math.max(r[1],0)}function Ak(r,e,t,a,n){r=e.scale.parse(r);var i=e.scale.getLabel({value:r},{precision:n.precision}),o=n.formatter;if(o){var s={value:u2(e,{value:r}),axisDimension:e.dim,axisIndex:e.index,seriesData:[]};P(a,function(l){var u=t.getSeriesByIndex(l.seriesIndex),f=l.dataIndexInside,v=u&&u.getDataParams(f);v&&s.seriesData.push(v)}),vt(o)?i=o.replace("{value}",i):bt(o)&&(i=o(s))}return i}function K2(r,e,t){var a=Ua();return sl(a,a,t.rotation),Pn(a,a,t.position),sn([r.dataToCoord(e),(t.labelOffset||0)+(t.labelDirection||1)*(t.labelMargin||0)],a)}function Dk(r,e,t,a,n,i){var o=Or.innerTextLayout(t.rotation,0,t.labelDirection);t.labelMargin=n.get(["label","margin"]),Tk(e,a,n,i,{position:K2(a.axis,r,t),align:o.textAlign,verticalAlign:o.textVerticalAlign})}function Q2(r,e,t){return t=t||0,{x1:r[t],y1:r[1-t],x2:e[t],y2:e[1-t]}}function Ck(r,e,t){return t=t||0,{x:r[t],y:r[1-t],width:e[t],height:e[1-t]}}function Y5(r,e,t,a,n,i){return{cx:r,cy:e,r0:t,r:a,startAngle:n,endAngle:i,clockwise:!0}}var wtt=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.makeElOption=function(t,a,n,i,o){var s=n.axis,l=s.grid,u=i.get("type"),f=X5(l,s).getOtherAxis(s).getGlobalExtent(),v=s.toGlobalCoord(s.dataToCoord(a,!0));if(u&&u!=="none"){var d=$2(i),p=Ttt[u](s,v,f);p.style=d,t.graphicKey=p.type,t.pointer=p}var y=AS(l.model,n);Dk(a,t,y,n,i,o)},e.prototype.getHandleTransform=function(t,a,n){var i=AS(a.axis.grid.model,a,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var o=K2(a.axis,t,i);return{x:o[0],y:o[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,a,n,i){var o=n.axis,s=o.grid,l=o.getGlobalExtent(!0),u=X5(s,o).getOtherAxis(o).getGlobalExtent(),f=o.dim==="x"?0:1,v=[t.x,t.y];v[f]+=a[f],v[f]=Math.min(l[1],v[f]),v[f]=Math.max(l[0],v[f]);var d=(u[1]+u[0])/2,p=[d,d];p[f]=v[f];var y=[{verticalAlign:"middle"},{align:"center"}];return{x:v[0],y:v[1],rotation:t.rotation,cursorPoint:p,tooltipOption:y[f]}},e})(q2);function X5(r,e){var t={};return t[e.dim+"AxisIndex"]=e.index,r.getCartesian(t)}var Ttt={line:function(r,e,t){var a=Q2([e,t[0]],[e,t[1]],Z5(r));return{type:"Line",subPixelOptimize:!0,shape:a}},shadow:function(r,e,t){var a=Math.max(1,r.getBandWidth()),n=t[1]-t[0];return{type:"Rect",shape:Ck([e-a/2,t[0]],[a,n],Z5(r))}}};function Z5(r){return r.dim==="x"?0:1}var Att=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.type="axisPointer",e.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,triggerEmphasis:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}},e})(jt),fi=Kt(),Dtt=P;function Mk(r,e,t){if(!Ft.node){var a=e.getZr();fi(a).records||(fi(a).records={}),Ctt(a,e);var n=fi(a).records[r]||(fi(a).records[r]={});n.handler=t}}function Ctt(r,e){if(fi(r).initialized)return;fi(r).initialized=!0,t("click",It(W5,"click")),t("mousemove",It(W5,"mousemove")),t("globalout",Ltt);function t(a,n){r.on(a,function(i){var o=Ett(e);Dtt(fi(r).records,function(s){s&&n(s,i,o.dispatchAction)}),Mtt(o.pendings,e)})}}function Mtt(r,e){var t=r.showTip.length,a=r.hideTip.length,n;t?n=r.showTip[t-1]:a&&(n=r.hideTip[a-1]),n&&(n.dispatchAction=null,e.dispatchAction(n))}function Ltt(r,e,t){r.handler("leave",null,t)}function W5(r,e,t,a){e.handler(r,t,a)}function Ett(r){var e={showTip:[],hideTip:[]},t=function(a){var n=e[a.type];n?n.push(a):(a.dispatchAction=t,r.dispatchAction(a))};return{dispatchAction:t,pendings:e}}function XS(r,e){if(!Ft.node){var t=e.getZr(),a=(fi(t).records||{})[r];a&&(fi(t).records[r]=null)}}var Rtt=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){var i=a.getComponent("tooltip"),o=t.get("triggerOn")||i&&i.get("triggerOn")||"mousemove|click";Mk("axisPointer",n,function(s,l,u){o!=="none"&&(s==="leave"||o.indexOf(s)>=0)&&u({type:"updateAxisPointer",currTrigger:s,x:l&&l.offsetX,y:l&&l.offsetY})})},e.prototype.remove=function(t,a){XS("axisPointer",a)},e.prototype.dispose=function(t,a){XS("axisPointer",a)},e.type="axisPointer",e})(Ee);function Lk(r,e){var t=[],a=r.seriesIndex,n;if(a==null||!(n=e.getSeriesByIndex(a)))return{point:[]};var i=n.getData(),o=tl(i,r);if(o==null||o<0||it(o))return{point:[]};var s=i.getItemGraphicEl(o),l=n.coordinateSystem;if(n.getTooltipPosition)t=n.getTooltipPosition(o)||[];else if(l&&l.dataToPoint)if(r.isStacked){var u=l.getBaseAxis(),f=l.getOtherAxis(u),v=f.dim,d=u.dim,p=v==="x"||v==="radius"?1:0,y=i.mapDimension(d),m=[];m[p]=i.get(y,o),m[1-p]=i.get(i.getCalculationInfo("stackResultDimension"),o),t=l.dataToPoint(m)||[]}else t=l.dataToPoint(i.getValues(st(l.dimensions,function(S){return i.mapDimension(S)}),o))||[];else if(s){var _=s.getBoundingRect().clone();_.applyTransform(s.transform),t=[_.x+_.width/2,_.y+_.height/2]}return{point:t,el:s}}var q5=Kt();function Itt(r,e,t){var a=r.currTrigger,n=[r.x,r.y],i=r,o=r.dispatchAction||dt(t.dispatchAction,t),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){Gp(n)&&(n=Lk({seriesIndex:i.seriesIndex,dataIndex:i.dataIndex},e).point);var l=Gp(n),u=i.axesInfo,f=s.axesInfo,v=a==="leave"||Gp(n),d={},p={},y={list:[],map:{}},m={showPointer:It(Ptt,p),showTooltip:It(Ott,y)};P(s.coordSysMap,function(S,b){var w=l||S.containPoint(n);P(s.coordSysAxesInfo[b],function(A,M){var C=A.axis,L=Vtt(u,A);if(!v&&w&&(!u||L)){var E=L&&L.value;E==null&&!l&&(E=C.pointToData(n)),E!=null&&$5(A,E,m,!1,d)}})});var _={};return P(f,function(S,b){var w=S.linkGroup;w&&!p[b]&&P(w.axesInfo,function(A,M){var C=p[M];if(A!==S&&C){var L=C.value;w.mapper&&(L=S.axis.scale.parse(w.mapper(L,K5(A),K5(S)))),_[S.key]=L}})}),P(_,function(S,b){$5(f[b],S,m,!0,d)}),ztt(p,f,d),ktt(y,n,r,o),Btt(f,o,t),d}}function $5(r,e,t,a,n){var i=r.axis;if(!(i.scale.isBlank()||!i.containData(e))){if(!r.involveSeries){t.showPointer(r,e);return}var o=Ntt(e,r),s=o.payloadBatch,l=o.snapToValue;s[0]&&n.seriesIndex==null&&et(n,s[0]),!a&&r.snap&&i.containData(l)&&l!=null&&(e=l),t.showPointer(r,e,s),t.showTooltip(r,o,l)}}function Ntt(r,e){var t=e.axis,a=t.dim,n=r,i=[],o=Number.MAX_VALUE,s=-1;return P(e.seriesModels,function(l,u){var f=l.getData().mapDimensionsAll(a),v,d;if(l.getAxisTooltipData){var p=l.getAxisTooltipData(f,r,t);d=p.dataIndices,v=p.nestestValue}else{if(d=l.getData().indicesOfNearest(f[0],r,t.type==="category"?.5:null),!d.length)return;v=l.getData().get(f[0],d[0])}if(!(v==null||!isFinite(v))){var y=r-v,m=Math.abs(y);m<=o&&((m=0&&s<0)&&(o=m,s=y,n=v,i.length=0),P(d,function(_){i.push({seriesIndex:l.seriesIndex,dataIndexInside:_,dataIndex:l.getData().getRawIndex(_)})}))}}),{payloadBatch:i,snapToValue:n}}function Ptt(r,e,t,a){r[e.key]={value:t,payloadBatch:a}}function Ott(r,e,t,a){var n=t.payloadBatch,i=e.axis,o=i.model,s=e.axisPointerModel;if(!(!e.triggerTooltip||!n.length)){var l=e.coordSys.model,u=wh(l),f=r.map[u];f||(f=r.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},r.list.push(f)),f.dataByAxis.push({axisDim:i.dim,axisIndex:o.componentIndex,axisType:o.type,axisId:o.id,value:a,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:n.slice()})}}function ztt(r,e,t){var a=t.axesInfo=[];P(e,function(n,i){var o=n.axisPointerModel.option,s=r[i];s?(!n.useHandle&&(o.status="show"),o.value=s.value,o.seriesDataIndices=(s.payloadBatch||[]).slice()):!n.useHandle&&(o.status="hide"),o.status==="show"&&a.push({axisDim:n.axis.dim,axisIndex:n.axis.model.componentIndex,value:o.value})})}function ktt(r,e,t,a){if(Gp(e)||!r.list.length){a({type:"hideTip"});return}var n=((r.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};a({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:t.tooltipOption,position:t.position,dataIndexInside:n.dataIndexInside,dataIndex:n.dataIndex,seriesIndex:n.seriesIndex,dataByCoordSys:r.list})}function Btt(r,e,t){var a=t.getZr(),n="axisPointerLastHighlights",i=q5(a)[n]||{},o=q5(a)[n]={};P(r,function(u,f){var v=u.axisPointerModel.option;v.status==="show"&&u.triggerEmphasis&&P(v.seriesDataIndices,function(d){var p=d.seriesIndex+" | "+d.dataIndex;o[p]=d})});var s=[],l=[];P(i,function(u,f){!o[f]&&l.push(u)}),P(o,function(u,f){!i[f]&&s.push(u)}),l.length&&t.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&t.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}function Vtt(r,e){for(var t=0;t<(r||[]).length;t++){var a=r[t];if(e.axis.dim===a.axisDim&&e.axis.model.componentIndex===a.axisIndex)return a}}function K5(r){var e=r.axis.model,t={},a=t.axisDim=r.axis.dim;return t.axisIndex=t[a+"AxisIndex"]=e.componentIndex,t.axisName=t[a+"AxisName"]=e.name,t.axisId=t[a+"AxisId"]=e.id,t}function Gp(r){return!r||r[0]==null||isNaN(r[0])||r[1]==null||isNaN(r[1])}function tv(r){fl.registerAxisPointerClass("CartesianAxisPointer",wtt),r.registerComponentModel(Att),r.registerComponentView(Rtt),r.registerPreprocessor(function(e){if(e){(!e.axisPointer||e.axisPointer.length===0)&&(e.axisPointer={});var t=e.axisPointer.link;t&&!it(t)&&(e.axisPointer.link=[t])}}),r.registerProcessor(r.PRIORITY.PROCESSOR.STATISTIC,function(e,t){e.getComponent("axisPointer").coordSysAxesInfo=qZ(e,t)}),r.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},Itt)}function Gtt(r){Ht(az),Ht(tv)}var Htt=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.makeElOption=function(t,a,n,i,o){var s=n.axis;s.dim==="angle"&&(this.animationThreshold=Math.PI/18);var l=s.polar,u=l.getOtherAxis(s),f=u.getExtent(),v=s.dataToCoord(a),d=i.get("type");if(d&&d!=="none"){var p=$2(i),y=Ftt[d](s,l,v,f);y.style=p,t.graphicKey=y.type,t.pointer=y}var m=i.get(["label","margin"]),_=Utt(a,n,i,l,m);Tk(t,n,i,o,_)},e})(q2);function Utt(r,e,t,a,n){var i=e.axis,o=i.dataToCoord(r),s=a.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l=a.getRadiusAxis().getExtent(),u,f,v;if(i.dim==="radius"){var d=Ua();sl(d,d,s),Pn(d,d,[a.cx,a.cy]),u=sn([o,-n],d);var p=e.getModel("axisLabel").get("rotate")||0,y=Or.innerTextLayout(s,p*Math.PI/180,-1);f=y.textAlign,v=y.textVerticalAlign}else{var m=l[1];u=a.coordToPoint([m+n,o]);var _=a.cx,S=a.cy;f=Math.abs(u[0]-_)/m<.3?"center":u[0]>_?"left":"right",v=Math.abs(u[1]-S)/m<.3?"middle":u[1]>S?"top":"bottom"}return{position:u,align:f,verticalAlign:v}}var Ftt={line:function(r,e,t,a){return r.dim==="angle"?{type:"Line",shape:Q2(e.coordToPoint([a[0],t]),e.coordToPoint([a[1],t]))}:{type:"Circle",shape:{cx:e.cx,cy:e.cy,r:t}}},shadow:function(r,e,t,a){var n=Math.max(1,r.getBandWidth()),i=Math.PI/180;return r.dim==="angle"?{type:"Sector",shape:Y5(e.cx,e.cy,a[0],a[1],(-t-n/2)*i,(-t+n/2)*i)}:{type:"Sector",shape:Y5(e.cx,e.cy,t-n/2,t+n/2,0,Math.PI*2)}}},jtt=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.findAxisModel=function(t){var a,n=this.ecModel;return n.eachComponent(t,function(i){i.getCoordSysModel()===this&&(a=i)},this),a},e.type="polar",e.dependencies=["radiusAxis","angleAxis"],e.defaultOption={z:0,center:["50%","50%"],radius:"80%"},e})(jt),J2=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getCoordSysModel=function(){return this.getReferringComponents("polar",je).models[0]},e.type="polarAxis",e})(jt);Xe(J2,Xh);var Ytt=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.type="angleAxis",e})(J2),Xtt=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.type="radiusAxis",e})(J2),tw=(function(r){$(e,r);function e(t,a){return r.call(this,"radius",t,a)||this}return e.prototype.pointToData=function(t,a){return this.polar.pointToData(t,a)[this.dim==="radius"?0:1]},e})(hn);tw.prototype.dataToRadius=hn.prototype.dataToCoord;tw.prototype.radiusToData=hn.prototype.coordToData;var Ztt=Kt(),ew=(function(r){$(e,r);function e(t,a){return r.call(this,"angle",t,a||[0,360])||this}return e.prototype.pointToData=function(t,a){return this.polar.pointToData(t,a)[this.dim==="radius"?0:1]},e.prototype.calculateCategoryInterval=function(){var t=this,a=t.getLabelModel(),n=t.scale,i=n.getExtent(),o=n.count();if(i[1]-i[0]<1)return 0;var s=i[0],l=t.dataToCoord(s+1)-t.dataToCoord(s),u=Math.abs(l),f=Nh(s==null?"":s+"",a.getFont(),"center","top"),v=Math.max(f.height,7),d=v/u;isNaN(d)&&(d=1/0);var p=Math.max(0,Math.floor(d)),y=Ztt(t.model),m=y.lastAutoInterval,_=y.lastTickCount;return m!=null&&_!=null&&Math.abs(m-p)<=1&&Math.abs(_-o)<=1&&m>p?p=m:(y.lastTickCount=o,y.lastAutoInterval=p),p},e})(hn);ew.prototype.dataToAngle=hn.prototype.dataToCoord;ew.prototype.angleToData=hn.prototype.coordToData;var Ek=["radius","angle"],Wtt=(function(){function r(e){this.dimensions=Ek,this.type="polar",this.cx=0,this.cy=0,this._radiusAxis=new tw,this._angleAxis=new ew,this.axisPointerEnabled=!0,this.name=e||"",this._radiusAxis.polar=this._angleAxis.polar=this}return r.prototype.containPoint=function(e){var t=this.pointToCoord(e);return this._radiusAxis.contain(t[0])&&this._angleAxis.contain(t[1])},r.prototype.containData=function(e){return this._radiusAxis.containData(e[0])&&this._angleAxis.containData(e[1])},r.prototype.getAxis=function(e){var t="_"+e+"Axis";return this[t]},r.prototype.getAxes=function(){return[this._radiusAxis,this._angleAxis]},r.prototype.getAxesByScale=function(e){var t=[],a=this._angleAxis,n=this._radiusAxis;return a.scale.type===e&&t.push(a),n.scale.type===e&&t.push(n),t},r.prototype.getAngleAxis=function(){return this._angleAxis},r.prototype.getRadiusAxis=function(){return this._radiusAxis},r.prototype.getOtherAxis=function(e){var t=this._angleAxis;return e===t?this._radiusAxis:t},r.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},r.prototype.getTooltipAxes=function(e){var t=e!=null&&e!=="auto"?this.getAxis(e):this.getBaseAxis();return{baseAxes:[t],otherAxes:[this.getOtherAxis(t)]}},r.prototype.dataToPoint=function(e,t){return this.coordToPoint([this._radiusAxis.dataToRadius(e[0],t),this._angleAxis.dataToAngle(e[1],t)])},r.prototype.pointToData=function(e,t){var a=this.pointToCoord(e);return[this._radiusAxis.radiusToData(a[0],t),this._angleAxis.angleToData(a[1],t)]},r.prototype.pointToCoord=function(e){var t=e[0]-this.cx,a=e[1]-this.cy,n=this.getAngleAxis(),i=n.getExtent(),o=Math.min(i[0],i[1]),s=Math.max(i[0],i[1]);n.inverse?o=s-360:s=o+360;var l=Math.sqrt(t*t+a*a);t/=l,a/=l;for(var u=Math.atan2(-a,t)/Math.PI*180,f=us;)u+=f*360;return[l,u]},r.prototype.coordToPoint=function(e){var t=e[0],a=e[1]/180*Math.PI,n=Math.cos(a)*t+this.cx,i=-Math.sin(a)*t+this.cy;return[n,i]},r.prototype.getArea=function(){var e=this.getAngleAxis(),t=this.getRadiusAxis(),a=t.getExtent().slice();a[0]>a[1]&&a.reverse();var n=e.getExtent(),i=Math.PI/180;return{cx:this.cx,cy:this.cy,r0:a[0],r:a[1],startAngle:-n[0]*i,endAngle:-n[1]*i,clockwise:e.inverse,contain:function(o,s){var l=o-this.cx,u=s-this.cy,f=l*l+u*u-1e-4,v=this.r,d=this.r0;return f<=v*v&&f>=d*d}}},r.prototype.convertToPixel=function(e,t,a){var n=Q5(t);return n===this?this.dataToPoint(a):null},r.prototype.convertFromPixel=function(e,t,a){var n=Q5(t);return n===this?this.pointToData(a):null},r})();function Q5(r){var e=r.seriesModel,t=r.polarModel;return t&&t.coordinateSystem||e&&e.coordinateSystem}function qtt(r,e,t){var a=e.get("center"),n=t.getWidth(),i=t.getHeight();r.cx=ft(a[0],n),r.cy=ft(a[1],i);var o=r.getRadiusAxis(),s=Math.min(n,i)/2,l=e.get("radius");l==null?l=[0,"100%"]:it(l)||(l=[0,l]);var u=[ft(l[0],s),ft(l[1],s)];o.inverse?o.setExtent(u[1],u[0]):o.setExtent(u[0],u[1])}function $tt(r,e){var t=this,a=t.getAngleAxis(),n=t.getRadiusAxis();if(a.scale.setExtent(1/0,-1/0),n.scale.setExtent(1/0,-1/0),r.eachSeries(function(s){if(s.coordinateSystem===t){var l=s.getData();P(mg(l,"radius"),function(u){n.scale.unionExtentFromData(l,u)}),P(mg(l,"angle"),function(u){a.scale.unionExtentFromData(l,u)})}}),zu(a.scale,a.model),zu(n.scale,n.model),a.type==="category"&&!a.onBand){var i=a.getExtent(),o=360/a.scale.count();a.inverse?i[1]+=o:i[1]-=o,a.setExtent(i[0],i[1])}}function Ktt(r){return r.mainType==="angleAxis"}function J5(r,e){if(r.type=e.get("type"),r.scale=_y(e),r.onBand=e.get("boundaryGap")&&r.type==="category",r.inverse=e.get("inverse"),Ktt(e)){r.inverse=r.inverse!==e.get("clockwise");var t=e.get("startAngle");r.setExtent(t,t+(r.inverse?-360:360))}e.axis=r,r.model=e}var Qtt={dimensions:Ek,create:function(r,e){var t=[];return r.eachComponent("polar",function(a,n){var i=new Wtt(n+"");i.update=$tt;var o=i.getRadiusAxis(),s=i.getAngleAxis(),l=a.findAxisModel("radiusAxis"),u=a.findAxisModel("angleAxis");J5(o,l),J5(s,u),qtt(i,a,e),t.push(i),a.coordinateSystem=i,i.model=a}),r.eachSeries(function(a){if(a.get("coordinateSystem")==="polar"){var n=a.getReferringComponents("polar",je).models[0];a.coordinateSystem=n.coordinateSystem}}),t}},Jtt=["axisLine","axisLabel","axisTick","minorTick","splitLine","minorSplitLine","splitArea"];function vp(r,e,t){e[1]>e[0]&&(e=e.slice().reverse());var a=r.coordToPoint([e[0],t]),n=r.coordToPoint([e[1],t]);return{x1:a[0],y1:a[1],x2:n[0],y2:n[1]}}function dp(r){var e=r.getRadiusAxis();return e.inverse?0:1}function tI(r){var e=r[0],t=r[r.length-1];e&&t&&Math.abs(Math.abs(e.coord-t.coord)-360)<1e-4&&r.pop()}var tet=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.axisPointerClass="PolarAxisPointer",t}return e.prototype.render=function(t,a){if(this.group.removeAll(),!!t.get("show")){var n=t.axis,i=n.polar,o=i.getRadiusAxis().getExtent(),s=n.getTicksCoords(),l=n.getMinorTicksCoords(),u=st(n.getViewLabels(),function(f){f=Dt(f);var v=n.scale,d=v.type==="ordinal"?v.getRawOrdinalNumber(f.tickValue):f.tickValue;return f.coord=n.dataToCoord(d),f});tI(u),tI(s),P(Jtt,function(f){t.get([f,"show"])&&(!n.scale.isBlank()||f==="axisLine")&&eet[f](this.group,t,i,s,l,o,u)},this)}},e.type="angleAxis",e})(fl),eet={axisLine:function(r,e,t,a,n,i){var o=e.getModel(["axisLine","lineStyle"]),s=dp(t),l=s?0:1,u;i[l]===0?u=new un({shape:{cx:t.cx,cy:t.cy,r:i[s]},style:o.getLineStyle(),z2:1,silent:!0}):u=new zh({shape:{cx:t.cx,cy:t.cy,r:i[s],r0:i[l]},style:o.getLineStyle(),z2:1,silent:!0}),u.style.fill=null,r.add(u)},axisTick:function(r,e,t,a,n,i){var o=e.getModel("axisTick"),s=(o.get("inside")?-1:1)*o.get("length"),l=i[dp(t)],u=st(a,function(f){return new er({shape:vp(t,[l,l+s],f.coord)})});r.add(Ba(u,{style:wt(o.getModel("lineStyle").getLineStyle(),{stroke:e.get(["axisLine","lineStyle","color"])})}))},minorTick:function(r,e,t,a,n,i){if(n.length){for(var o=e.getModel("axisTick"),s=e.getModel("minorTick"),l=(o.get("inside")?-1:1)*s.get("length"),u=i[dp(t)],f=[],v=0;vS?"left":"right",A=Math.abs(_[1]-b)/m<.3?"middle":_[1]>b?"top":"bottom";if(s&&s[y]){var M=s[y];Tt(M)&&M.textStyle&&(p=new oe(M.textStyle,l,l.ecModel))}var C=new $t({silent:Or.isLabelSilent(e),style:xe(p,{x:_[0],y:_[1],fill:p.getTextColor()||e.get(["axisLine","lineStyle","color"]),text:v.formattedLabel,align:w,verticalAlign:A})});if(r.add(C),f){var L=Or.makeAxisEventDataBase(e);L.targetType="axisLabel",L.value=v.rawLabel,Rt(C).eventData=L}},this)},splitLine:function(r,e,t,a,n,i){var o=e.getModel("splitLine"),s=o.getModel("lineStyle"),l=s.get("color"),u=0;l=l instanceof Array?l:[l];for(var f=[],v=0;v=0?"p":"n",G=L;M&&(a[f][O]||(a[f][O]={p:L,n:L}),G=a[f][O][k]);var H=void 0,F=void 0,B=void 0,j=void 0;if(y.dim==="radius"){var Y=y.dataToCoord(N)-L,K=l.dataToCoord(O);Math.abs(Y)=j})}}})}function uet(r){var e={};P(r,function(a,n){var i=a.getData(),o=a.coordinateSystem,s=o.getBaseAxis(),l=Ik(o,s),u=s.getExtent(),f=s.type==="category"?s.getBandWidth():Math.abs(u[1]-u[0])/i.count(),v=e[l]||{bandWidth:f,remainedWidth:f,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},d=v.stacks;e[l]=v;var p=Rk(a);d[p]||v.autoWidthCount++,d[p]=d[p]||{width:0,maxWidth:0};var y=ft(a.get("barWidth"),f),m=ft(a.get("barMaxWidth"),f),_=a.get("barGap"),S=a.get("barCategoryGap");y&&!d[p].width&&(y=Math.min(v.remainedWidth,y),d[p].width=y,v.remainedWidth-=y),m&&(d[p].maxWidth=m),_!=null&&(v.gap=_),S!=null&&(v.categoryGap=S)});var t={};return P(e,function(a,n){t[n]={};var i=a.stacks,o=a.bandWidth,s=ft(a.categoryGap,o),l=ft(a.gap,1),u=a.remainedWidth,f=a.autoWidthCount,v=(u-s)/(f+(f-1)*l);v=Math.max(v,0),P(i,function(m,_){var S=m.maxWidth;S&&S=t.y&&e[1]<=t.y+t.height:a.contain(a.toLocalCoord(e[1]))&&e[0]>=t.y&&e[0]<=t.y+t.height},r.prototype.pointToData=function(e){var t=this.getAxis();return[t.coordToData(t.toLocalCoord(e[t.orient==="horizontal"?0:1]))]},r.prototype.dataToPoint=function(e){var t=this.getAxis(),a=this.getRect(),n=[],i=t.orient==="horizontal"?0:1;return e instanceof Array&&(e=e[0]),n[i]=t.toGlobalCoord(t.dataToCoord(+e)),n[1-i]=i===0?a.y+a.height/2:a.x+a.width/2,n},r.prototype.convertToPixel=function(e,t,a){var n=eI(t);return n===this?this.dataToPoint(a):null},r.prototype.convertFromPixel=function(e,t,a){var n=eI(t);return n===this?this.pointToData(a):null},r})();function eI(r){var e=r.seriesModel,t=r.singleAxisModel;return t&&t.coordinateSystem||e&&e.coordinateSystem}function xet(r,e){var t=[];return r.eachComponent("singleAxis",function(a,n){var i=new _et(a,r,e);i.name="single_"+n,i.resize(a,e),a.coordinateSystem=i,t.push(i)}),r.eachSeries(function(a){if(a.get("coordinateSystem")==="singleAxis"){var n=a.getReferringComponents("singleAxis",je).models[0];a.coordinateSystem=n&&n.coordinateSystem}}),t}var bet={create:xet,dimensions:Nk},rI=["x","y"],wet=["width","height"],Tet=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.makeElOption=function(t,a,n,i,o){var s=n.axis,l=s.coordinateSystem,u=Q_(l,1-Ig(s)),f=l.dataToPoint(a)[0],v=i.get("type");if(v&&v!=="none"){var d=$2(i),p=Aet[v](s,f,u);p.style=d,t.graphicKey=p.type,t.pointer=p}var y=ZS(n);Dk(a,t,y,n,i,o)},e.prototype.getHandleTransform=function(t,a,n){var i=ZS(a,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var o=K2(a.axis,t,i);return{x:o[0],y:o[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,a,n,i){var o=n.axis,s=o.coordinateSystem,l=Ig(o),u=Q_(s,l),f=[t.x,t.y];f[l]+=a[l],f[l]=Math.min(u[1],f[l]),f[l]=Math.max(u[0],f[l]);var v=Q_(s,1-l),d=(v[1]+v[0])/2,p=[d,d];return p[l]=f[l],{x:f[0],y:f[1],rotation:t.rotation,cursorPoint:p,tooltipOption:{verticalAlign:"middle"}}},e})(q2),Aet={line:function(r,e,t){var a=Q2([e,t[0]],[e,t[1]],Ig(r));return{type:"Line",subPixelOptimize:!0,shape:a}},shadow:function(r,e,t){var a=r.getBandWidth(),n=t[1]-t[0];return{type:"Rect",shape:Ck([e-a/2,t[0]],[a,n],Ig(r))}}};function Ig(r){return r.isHorizontal()?0:1}function Q_(r,e){var t=r.getRect();return[t[rI[e]],t[rI[e]]+t[wet[e]]]}var Det=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.type="single",e})(Ee);function Cet(r){Ht(tv),fl.registerAxisPointerClass("SingleAxisPointer",Tet),r.registerComponentView(Det),r.registerComponentView(get),r.registerComponentModel(Hp),Bu(r,"single",Hp,Hp.defaultOption),r.registerCoordinateSystem("single",bet)}var Met=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.init=function(t,a,n){var i=Qu(t);r.prototype.init.apply(this,arguments),aI(t,i)},e.prototype.mergeOption=function(t){r.prototype.mergeOption.apply(this,arguments),aI(this.option,t)},e.prototype.getCellSize=function(){return this.option.cellSize},e.type="calendar",e.defaultOption={z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{color:"#fff",borderWidth:1,borderColor:"#ccc"},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},e})(jt);function aI(r,e){var t=r.cellSize,a;it(t)?a=t:a=r.cellSize=[t,t],a.length===1&&(a[1]=a[0]);var n=st([0,1],function(i){return q9(e,i)&&(a[i]="auto"),a[i]!=null&&a[i]!=="auto"});Ro(r,e,{type:"box",ignoreSize:n})}var Let=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){var i=this.group;i.removeAll();var o=t.coordinateSystem,s=o.getRangeInfo(),l=o.getOrient(),u=a.getLocaleModel();this._renderDayRect(t,s,i),this._renderLines(t,s,l,i),this._renderYearText(t,s,l,i),this._renderMonthText(t,u,l,i),this._renderWeekText(t,u,s,l,i)},e.prototype._renderDayRect=function(t,a,n){for(var i=t.coordinateSystem,o=t.getModel("itemStyle").getItemStyle(),s=i.getCellWidth(),l=i.getCellHeight(),u=a.start.time;u<=a.end.time;u=i.getNextNDay(u,1).time){var f=i.dataToRect([u],!1).tl,v=new Wt({shape:{x:f[0],y:f[1],width:s,height:l},cursor:"default",style:o});n.add(v)}},e.prototype._renderLines=function(t,a,n,i){var o=this,s=t.coordinateSystem,l=t.getModel(["splitLine","lineStyle"]).getLineStyle(),u=t.get(["splitLine","show"]),f=l.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var v=a.start,d=0;v.time<=a.end.time;d++){y(v.formatedDate),d===0&&(v=s.getDateInfo(a.start.y+"-"+a.start.m));var p=v.date;p.setMonth(p.getMonth()+1),v=s.getDateInfo(p)}y(s.getNextNDay(a.end.time,1).formatedDate);function y(m){o._firstDayOfMonth.push(s.getDateInfo(m)),o._firstDayPoints.push(s.dataToRect([m],!1).tl);var _=o._getLinePointsOfOneWeek(t,m,n);o._tlpoints.push(_[0]),o._blpoints.push(_[_.length-1]),u&&o._drawSplitline(_,l,i)}u&&this._drawSplitline(o._getEdgesPoints(o._tlpoints,f,n),l,i),u&&this._drawSplitline(o._getEdgesPoints(o._blpoints,f,n),l,i)},e.prototype._getEdgesPoints=function(t,a,n){var i=[t[0].slice(),t[t.length-1].slice()],o=n==="horizontal"?0:1;return i[0][o]=i[0][o]-a/2,i[1][o]=i[1][o]+a/2,i},e.prototype._drawSplitline=function(t,a,n){var i=new Gr({z2:20,shape:{points:t},style:a});n.add(i)},e.prototype._getLinePointsOfOneWeek=function(t,a,n){for(var i=t.coordinateSystem,o=i.getDateInfo(a),s=[],l=0;l<7;l++){var u=i.getNextNDay(o.time,l),f=i.dataToRect([u.time],!1);s[2*u.day]=f.tl,s[2*u.day+1]=f[n==="horizontal"?"bl":"tr"]}return s},e.prototype._formatterLabel=function(t,a){return vt(t)&&t?X9(t,a):bt(t)?t(a):a.nameMap},e.prototype._yearTextPositionControl=function(t,a,n,i,o){var s=a[0],l=a[1],u=["center","bottom"];i==="bottom"?(l+=o,u=["center","top"]):i==="left"?s-=o:i==="right"?(s+=o,u=["center","top"]):l-=o;var f=0;return(i==="left"||i==="right")&&(f=Math.PI/2),{rotation:f,x:s,y:l,style:{align:u[0],verticalAlign:u[1]}}},e.prototype._renderYearText=function(t,a,n,i){var o=t.getModel("yearLabel");if(o.get("show")){var s=o.get("margin"),l=o.get("position");l||(l=n!=="horizontal"?"top":"left");var u=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],f=(u[0][0]+u[1][0])/2,v=(u[0][1]+u[1][1])/2,d=n==="horizontal"?0:1,p={top:[f,u[d][1]],bottom:[f,u[1-d][1]],left:[u[1-d][0],v],right:[u[d][0],v]},y=a.start.y;+a.end.y>+a.start.y&&(y=y+"-"+a.end.y);var m=o.get("formatter"),_={start:a.start.y,end:a.end.y,nameMap:y},S=this._formatterLabel(m,_),b=new $t({z2:30,style:xe(o,{text:S})});b.attr(this._yearTextPositionControl(b,p[l],n,l,s)),i.add(b)}},e.prototype._monthTextPositionControl=function(t,a,n,i,o){var s="left",l="top",u=t[0],f=t[1];return n==="horizontal"?(f=f+o,a&&(s="center"),i==="start"&&(l="bottom")):(u=u+o,a&&(l="middle"),i==="start"&&(s="right")),{x:u,y:f,align:s,verticalAlign:l}},e.prototype._renderMonthText=function(t,a,n,i){var o=t.getModel("monthLabel");if(o.get("show")){var s=o.get("nameMap"),l=o.get("margin"),u=o.get("position"),f=o.get("align"),v=[this._tlpoints,this._blpoints];(!s||vt(s))&&(s&&(a=eS(s)||a),s=a.get(["time","monthAbbr"])||[]);var d=u==="start"?0:1,p=n==="horizontal"?0:1;l=u==="start"?-l:l;for(var y=f==="center",m=0;m=n.start.time&&a.times.end.time&&t.reverse(),t},r.prototype._getRangeInfo=function(e){var t=[this.getDateInfo(e[0]),this.getDateInfo(e[1])],a;t[0].time>t[1].time&&(a=!0,t.reverse());var n=Math.floor(t[1].time/J_)-Math.floor(t[0].time/J_)+1,i=new Date(t[0].time),o=i.getDate(),s=t[1].date.getDate();i.setDate(o+n-1);var l=i.getDate();if(l!==s)for(var u=i.getTime()-t[1].time>0?1:-1;(l=i.getDate())!==s&&(i.getTime()-t[1].time)*u>0;)n-=u,i.setDate(l-u);var f=Math.floor((n+t[0].day+6)/7),v=a?-f+1:f-1;return a&&t.reverse(),{range:[t[0].formatedDate,t[1].formatedDate],start:t[0],end:t[1],allDay:n,weeks:f,nthWeek:v,fweek:t[0].day,lweek:t[1].day}},r.prototype._getDateByWeeksAndDay=function(e,t,a){var n=this._getRangeInfo(a);if(e>n.weeks||e===0&&tn.lweek)return null;var i=(e-1)*7-n.fweek+t,o=new Date(n.start.time);return o.setDate(+n.start.d+i),this.getDateInfo(o)},r.create=function(e,t){var a=[];return e.eachComponent("calendar",function(n){var i=new r(n);a.push(i),n.coordinateSystem=i}),e.eachSeries(function(n){n.get("coordinateSystem")==="calendar"&&(n.coordinateSystem=a[n.get("calendarIndex")||0])}),a},r.dimensions=["time","value"],r})();function nI(r){var e=r.calendarModel,t=r.seriesModel,a=e?e.coordinateSystem:t?t.coordinateSystem:null;return a}function Ret(r){r.registerComponentModel(Met),r.registerComponentView(Let),r.registerCoordinateSystem("calendar",Eet)}function Iet(r,e){var t=r.existing;if(e.id=r.keyInfo.id,!e.type&&t&&(e.type=t.type),e.parentId==null){var a=e.parentOption;a?e.parentId=a.id:t&&(e.parentId=t.parentId)}e.parentOption=null}function iI(r,e){var t;return P(e,function(a){r[a]!=null&&r[a]!=="auto"&&(t=!0)}),t}function Net(r,e,t){var a=et({},t),n=r[e],i=t.$action||"merge";i==="merge"?n?(zt(n,a,!0),Ro(n,a,{ignoreSize:!0}),MP(t,n),pp(t,n),pp(t,n,"shape"),pp(t,n,"style"),pp(t,n,"extra"),t.clipPath=n.clipPath):r[e]=a:i==="replace"?r[e]=a:i==="remove"&&n&&(r[e]=null)}var Pk=["transition","enterFrom","leaveTo"],Pet=Pk.concat(["enterAnimation","updateAnimation","leaveAnimation"]);function pp(r,e,t){if(t&&(!r[t]&&e[t]&&(r[t]={}),r=r[t],e=e[t]),!(!r||!e))for(var a=t?Pk:Pet,n=0;n=0;f--){var v=n[f],d=Ke(v.id,null),p=d!=null?o.get(d):null;if(p){var y=p.parent,S=Oa(y),b=y===i?{width:s,height:l}:{width:S.width,height:S.height},w={},A=fy(p,v,b,null,{hv:v.hv,boundingMode:v.bounding},w);if(!Oa(p).isNew&&A){for(var M=v.transition,C={},L=0;L=0)?C[E]=R:p[E]=R}Jt(p,C,t,0)}else p.attr(w)}}},e.prototype._clear=function(){var t=this,a=this._elMap;a.each(function(n){Up(n,Oa(n).option,a,t._lastGraphicModel)}),this._elMap=xt()},e.prototype.dispose=function(){this._clear()},e.type="graphic",e})(Ee);function WS(r){var e=pt(oI,r)?oI[r]:zb(r),t=new e({});return Oa(t).type=r,t}function sI(r,e,t,a){var n=WS(t);return e.add(n),a.set(r,n),Oa(n).id=r,Oa(n).isNew=!0,n}function Up(r,e,t,a){var n=r&&r.parent;n&&(r.type==="group"&&r.traverse(function(i){Up(i,e,t,a)}),Cy(r,e,a),t.removeKey(Oa(r).id))}function lI(r,e,t,a){r.isGroup||P([["cursor",Fa.prototype.cursor],["zlevel",a||0],["z",t||0],["z2",0]],function(n){var i=n[0];pt(e,i)?r[i]=Ot(e[i],n[1]):r[i]==null&&(r[i]=n[1])}),P(Yt(e),function(n){if(n.indexOf("on")===0){var i=e[n];r[n]=bt(i)?i:null}}),pt(e,"draggable")&&(r.draggable=e.draggable),e.name!=null&&(r.name=e.name),e.id!=null&&(r.id=e.id)}function Bet(r){return r=et({},r),P(["id","parentId","$action","hv","bounding","textContent","clipPath"].concat(CP),function(e){delete r[e]}),r}function Vet(r,e,t){var a=Rt(r).eventData;!r.silent&&!r.ignore&&!a&&(a=Rt(r).eventData={componentType:"graphic",componentIndex:e.componentIndex,name:r.name}),a&&(a.info=t.info)}function Get(r){r.registerComponentModel(zet),r.registerComponentView(ket),r.registerPreprocessor(function(e){var t=e.graphic;it(t)?!t[0]||!t[0].elements?e.graphic=[{elements:t}]:e.graphic=[e.graphic[0]]:t&&!t.elements&&(e.graphic=[{elements:[t]}])})}var uI=["x","y","radius","angle","single"],Het=["cartesian2d","polar","singleAxis"];function Uet(r){var e=r.get("coordinateSystem");return Vt(Het,e)>=0}function So(r){return r+"Axis"}function Fet(r,e){var t=xt(),a=[],n=xt();r.eachComponent({mainType:"dataZoom",query:e},function(f){n.get(f.uid)||s(f)});var i;do i=!1,r.eachComponent("dataZoom",o);while(i);function o(f){!n.get(f.uid)&&l(f)&&(s(f),i=!0)}function s(f){n.set(f.uid,!0),a.push(f),u(f)}function l(f){var v=!1;return f.eachTargetAxis(function(d,p){var y=t.get(d);y&&y[p]&&(v=!0)}),v}function u(f){f.eachTargetAxis(function(v,d){(t.get(v)||t.set(v,[]))[d]=!0})}return a}function Ok(r){var e=r.ecModel,t={infoList:[],infoMap:xt()};return r.eachTargetAxis(function(a,n){var i=e.getComponent(So(a),n);if(i){var o=i.getCoordSysModel();if(o){var s=o.uid,l=t.infoMap.get(s);l||(l={model:o,axisModels:[]},t.infoList.push(l),t.infoMap.set(s,l)),l.axisModels.push(i)}}}),t}var tx=(function(){function r(){this.indexList=[],this.indexMap=[]}return r.prototype.add=function(e){this.indexMap[e]||(this.indexList.push(e),this.indexMap[e]=!0)},r})(),Lh=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t._autoThrottle=!0,t._noTarget=!0,t._rangePropMode=["percent","percent"],t}return e.prototype.init=function(t,a,n){var i=cI(t);this.settledOption=i,this.mergeDefaultAndTheme(t,n),this._doInit(i)},e.prototype.mergeOption=function(t){var a=cI(t);zt(this.option,t,!0),zt(this.settledOption,a,!0),this._doInit(a)},e.prototype._doInit=function(t){var a=this.option;this._setDefaultThrottle(t),this._updateRangeUse(t);var n=this.settledOption;P([["start","startValue"],["end","endValue"]],function(i,o){this._rangePropMode[o]==="value"&&(a[i[0]]=n[i[0]]=null)},this),this._resetTarget()},e.prototype._resetTarget=function(){var t=this.get("orient",!0),a=this._targetAxisInfoMap=xt(),n=this._fillSpecifiedTargetAxis(a);n?this._orient=t||this._makeAutoOrientByTargetAxis():(this._orient=t||"horizontal",this._fillAutoTargetAxisByOrient(a,this._orient)),this._noTarget=!0,a.each(function(i){i.indexList.length&&(this._noTarget=!1)},this)},e.prototype._fillSpecifiedTargetAxis=function(t){var a=!1;return P(uI,function(n){var i=this.getReferringComponents(So(n),O8);if(i.specified){a=!0;var o=new tx;P(i.models,function(s){o.add(s.componentIndex)}),t.set(n,o)}},this),a},e.prototype._fillAutoTargetAxisByOrient=function(t,a){var n=this.ecModel,i=!0;if(i){var o=a==="vertical"?"y":"x",s=n.findComponents({mainType:o+"Axis"});l(s,o)}if(i){var s=n.findComponents({mainType:"singleAxis",filter:function(f){return f.get("orient",!0)===a}});l(s,"single")}function l(u,f){var v=u[0];if(v){var d=new tx;if(d.add(v.componentIndex),t.set(f,d),i=!1,f==="x"||f==="y"){var p=v.getReferringComponents("grid",je).models[0];p&&P(u,function(y){v.componentIndex!==y.componentIndex&&p===y.getReferringComponents("grid",je).models[0]&&d.add(y.componentIndex)})}}}i&&P(uI,function(u){if(i){var f=n.findComponents({mainType:So(u),filter:function(d){return d.get("type",!0)==="category"}});if(f[0]){var v=new tx;v.add(f[0].componentIndex),t.set(u,v),i=!1}}},this)},e.prototype._makeAutoOrientByTargetAxis=function(){var t;return this.eachTargetAxis(function(a){!t&&(t=a)},this),t==="y"?"vertical":"horizontal"},e.prototype._setDefaultThrottle=function(t){if(t.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var a=this.ecModel.option;this.option.throttle=a.animation&&a.animationDurationUpdate>0?100:20}},e.prototype._updateRangeUse=function(t){var a=this._rangePropMode,n=this.get("rangeMode");P([["start","startValue"],["end","endValue"]],function(i,o){var s=t[i[0]]!=null,l=t[i[1]]!=null;s&&!l?a[o]="percent":!s&&l?a[o]="value":n?a[o]=n[o]:s&&(a[o]="percent")})},e.prototype.noTarget=function(){return this._noTarget},e.prototype.getFirstTargetAxisModel=function(){var t;return this.eachTargetAxis(function(a,n){t==null&&(t=this.ecModel.getComponent(So(a),n))},this),t},e.prototype.eachTargetAxis=function(t,a){this._targetAxisInfoMap.each(function(n,i){P(n.indexList,function(o){t.call(a,i,o)})})},e.prototype.getAxisProxy=function(t,a){var n=this.getAxisModel(t,a);if(n)return n.__dzAxisProxy},e.prototype.getAxisModel=function(t,a){var n=this._targetAxisInfoMap.get(t);if(n&&n.indexMap[a])return this.ecModel.getComponent(So(t),a)},e.prototype.setRawRange=function(t){var a=this.option,n=this.settledOption;P([["start","startValue"],["end","endValue"]],function(i){(t[i[0]]!=null||t[i[1]]!=null)&&(a[i[0]]=n[i[0]]=t[i[0]],a[i[1]]=n[i[1]]=t[i[1]])},this),this._updateRangeUse(t)},e.prototype.setCalculatedRange=function(t){var a=this.option;P(["start","startValue","end","endValue"],function(n){a[n]=t[n]})},e.prototype.getPercentRange=function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},e.prototype.getValueRange=function(t,a){if(t==null&&a==null){var n=this.findRepresentativeAxisProxy();if(n)return n.getDataValueWindow()}else return this.getAxisProxy(t,a).getDataValueWindow()},e.prototype.findRepresentativeAxisProxy=function(t){if(t)return t.__dzAxisProxy;for(var a,n=this._targetAxisInfoMap.keys(),i=0;io[1];if(w&&!A&&!M)return!0;w&&(_=!0),A&&(y=!0),M&&(m=!0)}return _&&y&&m})}else Su(f,function(p){if(i==="empty")l.setData(u=u.map(p,function(m){return s(m)?m:NaN}));else{var y={};y[p]=o,u.selectRange(y)}});Su(f,function(p){u.setApproximateExtent(o,p)})}});function s(l){return l>=o[0]&&l<=o[1]}},r.prototype._updateMinMaxSpan=function(){var e=this._minMaxSpan={},t=this._dataZoomModel,a=this._dataExtent;Su(["min","max"],function(n){var i=t.get(n+"Span"),o=t.get(n+"ValueSpan");o!=null&&(o=this.getAxisModel().axis.scale.parse(o)),o!=null?i=se(a[0]+o,a,[0,100],!0):i!=null&&(o=se(i,[0,100],a,!0)-a[0]),e[n+"Span"]=i,e[n+"ValueSpan"]=o},this)},r.prototype._setAxisModel=function(){var e=this.getAxisModel(),t=this._percentWindow,a=this._valueWindow;if(t){var n=d3(a,[0,500]);n=Math.min(n,20);var i=e.axis.scale.rawExtentInfo;t[0]!==0&&i.setDeterminedMinMax("min",+a[0].toFixed(n)),t[1]!==100&&i.setDeterminedMinMax("max",+a[1].toFixed(n)),i.freeze()}},r})();function Zet(r,e,t){var a=[1/0,-1/0];Su(t,function(o){DY(a,o.getData(),e)});var n=r.getAxisModel(),i=r4(n.axis.scale,n,a).calculate();return[i.min,i.max]}var Wet={getTargetSeries:function(r){function e(n){r.eachComponent("dataZoom",function(i){i.eachTargetAxis(function(o,s){var l=r.getComponent(So(o),s);n(o,s,l,i)})})}e(function(n,i,o,s){o.__dzAxisProxy=null});var t=[];e(function(n,i,o,s){o.__dzAxisProxy||(o.__dzAxisProxy=new Xet(n,i,s,r),t.push(o.__dzAxisProxy))});var a=xt();return P(t,function(n){P(n.getTargetSeriesModels(),function(i){a.set(i.uid,i)})}),a},overallReset:function(r,e){r.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(a,n){t.getAxisProxy(a,n).reset(t)}),t.eachTargetAxis(function(a,n){t.getAxisProxy(a,n).filterData(t,e)})}),r.eachComponent("dataZoom",function(t){var a=t.findRepresentativeAxisProxy();if(a){var n=a.getDataPercentWindow(),i=a.getDataValueWindow();t.setCalculatedRange({start:n[0],end:n[1],startValue:i[0],endValue:i[1]})}})}};function qet(r){r.registerAction("dataZoom",function(e,t){var a=Fet(t,e);P(a,function(n){n.setRawRange({start:e.start,end:e.end,startValue:e.startValue,endValue:e.endValue})})})}var hI=!1;function aw(r){hI||(hI=!0,r.registerProcessor(r.PRIORITY.PROCESSOR.FILTER,Wet),qet(r),r.registerSubTypeDefaulter("dataZoom",function(){return"slider"}))}function $et(r){r.registerComponentModel(jet),r.registerComponentView(Yet),aw(r)}var ka=(function(){function r(){}return r})(),zk={};function bu(r,e){zk[r]=e}function kk(r){return zk[r]}var Ket=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.optionUpdated=function(){r.prototype.optionUpdated.apply(this,arguments);var t=this.ecModel;P(this.option.feature,function(a,n){var i=kk(n);i&&(i.getDefaultOption&&(i.defaultOption=i.getDefaultOption(t)),zt(a,i.defaultOption))})},e.type="toolbox",e.layoutMode={type:"box",ignoreSize:!0},e.defaultOption={show:!0,z:6,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{borderColor:"#666",color:"none"},emphasis:{iconStyle:{borderColor:"#3E98C5"}},tooltip:{show:!1,position:"bottom"}},e})(jt);function Qet(r,e,t){var a=e.getBoxLayoutParams(),n=e.get("padding"),i={width:t.getWidth(),height:t.getHeight()},o=Qe(a,i,n);qs(e.get("orient"),r,e.get("itemGap"),o.width,o.height),fy(r,a,i,n)}function Bk(r,e){var t=Ku(e.get("padding")),a=e.getItemStyle(["color","opacity"]);return a.fill=e.get("backgroundColor"),r=new Wt({shape:{x:r.x-t[3],y:r.y-t[0],width:r.width+t[1]+t[3],height:r.height+t[0]+t[2],r:e.get("borderRadius")},style:a,silent:!0,z2:-1}),r}var Jet=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.render=function(t,a,n,i){var o=this.group;if(o.removeAll(),!t.get("show"))return;var s=+t.get("itemSize"),l=t.get("orient")==="vertical",u=t.get("feature")||{},f=this._features||(this._features={}),v=[];P(u,function(y,m){v.push(m)}),new Si(this._featureNames||[],v).add(d).update(d).remove(It(d,null)).execute(),this._featureNames=v;function d(y,m){var _=v[y],S=v[m],b=u[_],w=new oe(b,t,t.ecModel),A;if(i&&i.newTitle!=null&&i.featureName===_&&(b.title=i.newTitle),_&&!S){if(trt(_))A={onclick:w.option.onclick,featureName:_};else{var M=kk(_);if(!M)return;A=new M}f[_]=A}else if(A=f[S],!A)return;A.uid=$u("toolbox-feature"),A.model=w,A.ecModel=a,A.api=n;var C=A instanceof ka;if(!_&&S){C&&A.dispose&&A.dispose(a,n);return}if(!w.get("show")||C&&A.unusable){C&&A.remove&&A.remove(a,n);return}p(w,A,_),w.setIconStatus=function(L,E){var R=this.option,N=this.iconPaths;R.iconStatus=R.iconStatus||{},R.iconStatus[L]=E,N[L]&&(E==="emphasis"?_i:xi)(N[L])},A instanceof ka&&A.render&&A.render(w,a,n,i)}function p(y,m,_){var S=y.getModel("iconStyle"),b=y.getModel(["emphasis","iconStyle"]),w=m instanceof ka&&m.getIcons?m.getIcons():y.get("icon"),A=y.get("title")||{},M,C;vt(w)?(M={},M[_]=w):M=w,vt(A)?(C={},C[_]=A):C=A;var L=y.iconPaths={};P(M,function(E,R){var N=Gh(E,{},{x:-s/2,y:-s/2,width:s,height:s});N.setStyle(S.getItemStyle());var O=N.ensureState("emphasis");O.style=b.getItemStyle();var k=new $t({style:{text:C[R],align:b.get("textAlign"),borderRadius:b.get("textBorderRadius"),padding:b.get("textPadding"),fill:null},ignore:!0});N.setTextContent(k),Wu({el:N,componentModel:t,itemName:R,formatterParamsExtra:{title:C[R]}}),N.__title=C[R],N.on("mouseover",function(){var G=b.getItemStyle(),H=l?t.get("right")==null&&t.get("left")!=="right"?"right":"left":t.get("bottom")==null&&t.get("top")!=="bottom"?"bottom":"top";k.setStyle({fill:b.get("textFill")||G.fill||G.stroke||"#000",backgroundColor:b.get("textBackgroundColor")}),N.setTextConfig({position:b.get("textPosition")||H}),k.ignore=!t.get("showTitle"),n.enterEmphasis(this)}).on("mouseout",function(){y.get(["iconStatus",R])!=="emphasis"&&n.leaveEmphasis(this),k.hide()}),(y.get(["iconStatus",R])==="emphasis"?_i:xi)(N),o.add(N),N.on("click",dt(m.onclick,m,a,n,R)),L[R]=N})}Qet(o,t,n),o.add(Bk(o.getBoundingRect(),t)),l||o.eachChild(function(y){var m=y.__title,_=y.ensureState("emphasis"),S=_.textConfig||(_.textConfig={}),b=y.getTextContent(),w=b&&b.ensureState("emphasis");if(w&&!bt(w)&&m){var A=w.style||(w.style={}),M=Nh(m,$t.makeFont(A)),C=y.x+o.x,L=y.y+o.y+s,E=!1;L+M.height>n.getHeight()&&(S.position="top",E=!0);var R=E?-5-M.height:s+10;C+M.width/2>n.getWidth()?(S.position=["100%",R],A.align="right"):C-M.width/2<0&&(S.position=[0,R],A.align="left")}})},e.prototype.updateView=function(t,a,n,i){P(this._features,function(o){o instanceof ka&&o.updateView&&o.updateView(o.model,a,n,i)})},e.prototype.remove=function(t,a){P(this._features,function(n){n instanceof ka&&n.remove&&n.remove(t,a)}),this.group.removeAll()},e.prototype.dispose=function(t,a){P(this._features,function(n){n instanceof ka&&n.dispose&&n.dispose(t,a)})},e.type="toolbox",e})(Ee);function trt(r){return r.indexOf("my")===0}var ert=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.onclick=function(t,a){var n=this.model,i=n.get("name")||t.get("title.0.text")||"echarts",o=a.getZr().painter.getType()==="svg",s=o?"svg":n.get("type",!0)||"png",l=a.getConnectedDataURL({type:s,backgroundColor:n.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")}),u=Ft.browser;if(bt(MouseEvent)&&(u.newEdge||!u.ie&&!u.edge)){var f=document.createElement("a");f.download=i+"."+s,f.target="_blank",f.href=l;var v=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});f.dispatchEvent(v)}else if(window.navigator.msSaveOrOpenBlob||o){var d=l.split(","),p=d[0].indexOf("base64")>-1,y=o?decodeURIComponent(d[1]):d[1];p&&(y=window.atob(y));var m=i+"."+s;if(window.navigator.msSaveOrOpenBlob){for(var _=y.length,S=new Uint8Array(_);_--;)S[_]=y.charCodeAt(_);var b=new Blob([S]);window.navigator.msSaveOrOpenBlob(b,m)}else{var w=document.createElement("iframe");document.body.appendChild(w);var A=w.contentWindow,M=A.document;M.open("image/svg+xml","replace"),M.write(y),M.close(),A.focus(),M.execCommand("SaveAs",!0,m),document.body.removeChild(w)}}else{var C=n.get("lang"),L='',E=window.open();E.document.write(L),E.document.title=i}},e.getDefaultOption=function(t){var a={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:t.getLocaleModel().get(["toolbox","saveAsImage","title"]),type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],lang:t.getLocaleModel().get(["toolbox","saveAsImage","lang"])};return a},e})(ka),vI="__ec_magicType_stack__",rrt=[["line","bar"],["stack"]],art=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getIcons=function(){var t=this.model,a=t.get("icon"),n={};return P(t.get("type"),function(i){a[i]&&(n[i]=a[i])}),n},e.getDefaultOption=function(t){var a={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:t.getLocaleModel().get(["toolbox","magicType","title"]),option:{},seriesIndex:{}};return a},e.prototype.onclick=function(t,a,n){var i=this.model,o=i.get(["seriesIndex",n]);if(dI[n]){var s={series:[]},l=function(v){var d=v.subType,p=v.id,y=dI[n](d,p,v,i);y&&(wt(y,v.option),s.series.push(y));var m=v.coordinateSystem;if(m&&m.type==="cartesian2d"&&(n==="line"||n==="bar")){var _=m.getAxesByScale("ordinal")[0];if(_){var S=_.dim,b=S+"Axis",w=v.getReferringComponents(b,je).models[0],A=w.componentIndex;s[b]=s[b]||[];for(var M=0;M<=A;M++)s[b][A]=s[b][A]||{};s[b][A].boundaryGap=n==="bar"}}};P(rrt,function(v){Vt(v,n)>=0&&P(v,function(d){i.setIconStatus(d,"normal")})}),i.setIconStatus(n,"emphasis"),t.eachComponent({mainType:"series",query:o==null?null:{seriesIndex:o}},l);var u,f=n;n==="stack"&&(u=zt({stack:i.option.title.tiled,tiled:i.option.title.stack},i.option.title),i.get(["iconStatus",n])!=="emphasis"&&(f="tiled")),a.dispatchAction({type:"changeMagicType",currentType:f,newOption:s,newTitle:u,featureName:"magicType"})}},e})(ka),dI={line:function(r,e,t,a){if(r==="bar")return zt({id:e,type:"line",data:t.get("data"),stack:t.get("stack"),markPoint:t.get("markPoint"),markLine:t.get("markLine")},a.get(["option","line"])||{},!0)},bar:function(r,e,t,a){if(r==="line")return zt({id:e,type:"bar",data:t.get("data"),stack:t.get("stack"),markPoint:t.get("markPoint"),markLine:t.get("markLine")},a.get(["option","bar"])||{},!0)},stack:function(r,e,t,a){var n=t.get("stack")===vI;if(r==="line"||r==="bar")return a.setIconStatus("stack",n?"normal":"emphasis"),zt({id:e,stack:n?"":vI},a.get(["option","stack"])||{},!0)}};Vn({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(r,e){e.mergeOption(r.newOption)});var My=new Array(60).join("-"),Hu=" ";function nrt(r){var e={},t=[],a=[];return r.eachRawSeries(function(n){var i=n.coordinateSystem;if(i&&(i.type==="cartesian2d"||i.type==="polar")){var o=i.getBaseAxis();if(o.type==="category"){var s=o.dim+"_"+o.index;e[s]||(e[s]={categoryAxis:o,valueAxis:i.getOtherAxis(o),series:[]},a.push({axisDim:o.dim,axisIndex:o.index})),e[s].series.push(n)}else t.push(n)}else t.push(n)}),{seriesGroupByCategoryAxis:e,other:t,meta:a}}function irt(r){var e=[];return P(r,function(t,a){var n=t.categoryAxis,i=t.valueAxis,o=i.dim,s=[" "].concat(st(t.series,function(p){return p.name})),l=[n.model.getCategories()];P(t.series,function(p){var y=p.getRawData();l.push(p.getRawData().mapArray(y.mapDimension(o),function(m){return m}))});for(var u=[s.join(Hu)],f=0;f=0)return!0}var qS=new RegExp("["+Hu+"]+","g");function urt(r){for(var e=r.split(/\n+/g),t=Ng(e.shift()).split(qS),a=[],n=st(t,function(l){return{name:l,data:[]}}),i=0;i=0;i--){var o=t[i];if(o[n])break}if(i<0){var s=r.queryComponents({mainType:"dataZoom",subType:"select",id:n})[0];if(s){var l=s.getPercentRange();t[0][n]={dataZoomId:n,start:l[0],end:l[1]}}}}),t.push(e)}function prt(r){var e=nw(r),t=e[e.length-1];e.length>1&&e.pop();var a={};return Vk(t,function(n,i){for(var o=e.length-1;o>=0;o--)if(n=e[o][i],n){a[i]=n;break}}),a}function grt(r){Gk(r).snapshots=null}function yrt(r){return nw(r).length}function nw(r){var e=Gk(r);return e.snapshots||(e.snapshots=[{}]),e.snapshots}var mrt=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.onclick=function(t,a){grt(t),a.dispatchAction({type:"restore",from:this.uid})},e.getDefaultOption=function(t){var a={show:!0,icon:"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",title:t.getLocaleModel().get(["toolbox","restore","title"])};return a},e})(ka);Vn({type:"restore",event:"restore",update:"prepareAndUpdate"},function(r,e){e.resetOption("recreate")});var _rt=["grid","xAxis","yAxis","geo","graph","polar","radiusAxis","angleAxis","bmap"],iw=(function(){function r(e,t,a){var n=this;this._targetInfoList=[];var i=pI(t,e);P(xrt,function(o,s){(!a||!a.include||Vt(a.include,s)>=0)&&o(i,n._targetInfoList)})}return r.prototype.setOutputRanges=function(e,t){return this.matchOutputRanges(e,t,function(a,n,i){if((a.coordRanges||(a.coordRanges=[])).push(n),!a.coordRange){a.coordRange=n;var o=ex[a.brushType](0,i,n);a.__rangeOffset={offset:_I[a.brushType](o.values,a.range,[1,1]),xyMinMax:o.xyMinMax}}}),e},r.prototype.matchOutputRanges=function(e,t,a){P(e,function(n){var i=this.findTargetInfo(n,t);i&&i!==!0&&P(i.coordSyses,function(o){var s=ex[n.brushType](1,o,n.range,!0);a(n,s.values,o,t)})},this)},r.prototype.setInputRanges=function(e,t){P(e,function(a){var n=this.findTargetInfo(a,t);if(a.range=a.range||[],n&&n!==!0){a.panelId=n.panelId;var i=ex[a.brushType](0,n.coordSys,a.coordRange),o=a.__rangeOffset;a.range=o?_I[a.brushType](i.values,o.offset,Srt(i.xyMinMax,o.xyMinMax)):i.values}},this)},r.prototype.makePanelOpts=function(e,t){return st(this._targetInfoList,function(a){var n=a.getPanelRect();return{panelId:a.panelId,defaultBrushType:t?t(a):null,clipPath:Wz(n),isTargetByCursor:$z(n,e,a.coordSysModel),getLinearBrushOtherExtent:qz(n)}})},r.prototype.controlSeries=function(e,t,a){var n=this.findTargetInfo(e,a);return n===!0||n&&Vt(n.coordSyses,t.coordinateSystem)>=0},r.prototype.findTargetInfo=function(e,t){for(var a=this._targetInfoList,n=pI(t,e),i=0;ir[1]&&r.reverse(),r}function pI(r,e){return Xf(r,e,{includeMainTypes:_rt})}var xrt={grid:function(r,e){var t=r.xAxisModels,a=r.yAxisModels,n=r.gridModels,i=xt(),o={},s={};!t&&!a&&!n||(P(t,function(l){var u=l.axis.grid.model;i.set(u.id,u),o[u.id]=!0}),P(a,function(l){var u=l.axis.grid.model;i.set(u.id,u),s[u.id]=!0}),P(n,function(l){i.set(l.id,l),o[l.id]=!0,s[l.id]=!0}),i.each(function(l){var u=l.coordinateSystem,f=[];P(u.getCartesians(),function(v,d){(Vt(t,v.getAxis("x").model)>=0||Vt(a,v.getAxis("y").model)>=0)&&f.push(v)}),e.push({panelId:"grid--"+l.id,gridModel:l,coordSysModel:l,coordSys:f[0],coordSyses:f,getPanelRect:yI.grid,xAxisDeclared:o[l.id],yAxisDeclared:s[l.id]})}))},geo:function(r,e){P(r.geoModels,function(t){var a=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:a,coordSyses:[a],getPanelRect:yI.geo})})}},gI=[function(r,e){var t=r.xAxisModel,a=r.yAxisModel,n=r.gridModel;return!n&&t&&(n=t.axis.grid.model),!n&&a&&(n=a.axis.grid.model),n&&n===e.gridModel},function(r,e){var t=r.geoModel;return t&&t===e.geoModel}],yI={grid:function(){return this.coordSys.master.getRect().clone()},geo:function(){var r=this.coordSys,e=r.getBoundingRect().clone();return e.applyTransform(Ws(r)),e}},ex={lineX:It(mI,0),lineY:It(mI,1),rect:function(r,e,t,a){var n=r?e.pointToData([t[0][0],t[1][0]],a):e.dataToPoint([t[0][0],t[1][0]],a),i=r?e.pointToData([t[0][1],t[1][1]],a):e.dataToPoint([t[0][1],t[1][1]],a),o=[$S([n[0],i[0]]),$S([n[1],i[1]])];return{values:o,xyMinMax:o}},polygon:function(r,e,t,a){var n=[[1/0,-1/0],[1/0,-1/0]],i=st(t,function(o){var s=r?e.pointToData(o,a):e.dataToPoint(o,a);return n[0][0]=Math.min(n[0][0],s[0]),n[1][0]=Math.min(n[1][0],s[1]),n[0][1]=Math.max(n[0][1],s[0]),n[1][1]=Math.max(n[1][1],s[1]),s});return{values:i,xyMinMax:n}}};function mI(r,e,t,a){var n=t.getAxis(["x","y"][r]),i=$S(st([0,1],function(s){return e?n.coordToData(n.toLocalCoord(a[s]),!0):n.toGlobalCoord(n.dataToCoord(a[s]))})),o=[];return o[r]=i,o[1-r]=[NaN,NaN],{values:i,xyMinMax:o}}var _I={lineX:It(xI,0),lineY:It(xI,1),rect:function(r,e,t){return[[r[0][0]-t[0]*e[0][0],r[0][1]-t[0]*e[0][1]],[r[1][0]-t[1]*e[1][0],r[1][1]-t[1]*e[1][1]]]},polygon:function(r,e,t){return st(r,function(a,n){return[a[0]-t[0]*e[n][0],a[1]-t[1]*e[n][1]]})}};function xI(r,e,t,a){return[e[0]-a[r]*t[0],e[1]-a[r]*t[1]]}function Srt(r,e){var t=SI(r),a=SI(e),n=[t[0]/a[0],t[1]/a[1]];return isNaN(n[0])&&(n[0]=1),isNaN(n[1])&&(n[1]=1),n}function SI(r){return r?[r[0][1]-r[0][0],r[1][1]-r[1][0]]:[NaN,NaN]}var KS=P,brt=E8("toolbox-dataZoom_"),wrt=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.render=function(t,a,n,i){this._brushController||(this._brushController=new P2(n.getZr()),this._brushController.on("brush",dt(this._onBrush,this)).mount()),Drt(t,a,this,i,n),Art(t,a)},e.prototype.onclick=function(t,a,n){Trt[n].call(this)},e.prototype.remove=function(t,a){this._brushController&&this._brushController.unmount()},e.prototype.dispose=function(t,a){this._brushController&&this._brushController.dispose()},e.prototype._onBrush=function(t){var a=t.areas;if(!t.isEnd||!a.length)return;var n={},i=this.ecModel;this._brushController.updateCovers([]);var o=new iw(ow(this.model),i,{include:["grid"]});o.matchOutputRanges(a,i,function(u,f,v){if(v.type==="cartesian2d"){var d=u.brushType;d==="rect"?(s("x",v,f[0]),s("y",v,f[1])):s({lineX:"x",lineY:"y"}[d],v,f)}}),drt(i,n),this._dispatchZoomAction(n);function s(u,f,v){var d=f.getAxis(u),p=d.model,y=l(u,p,i),m=y.findRepresentativeAxisProxy(p).getMinMaxSpan();(m.minValueSpan!=null||m.maxValueSpan!=null)&&(v=hl(0,v.slice(),d.scale.getExtent(),0,m.minValueSpan,m.maxValueSpan)),y&&(n[y.id]={dataZoomId:y.id,startValue:v[0],endValue:v[1]})}function l(u,f,v){var d;return v.eachComponent({mainType:"dataZoom",subType:"select"},function(p){var y=p.getAxisModel(u,f.componentIndex);y&&(d=p)}),d}},e.prototype._dispatchZoomAction=function(t){var a=[];KS(t,function(n,i){a.push(Dt(n))}),a.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:a})},e.getDefaultOption=function(t){var a={show:!0,filterMode:"filter",icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:t.getLocaleModel().get(["toolbox","dataZoom","title"]),brushStyle:{borderWidth:0,color:"rgba(210,219,238,0.2)"}};return a},e})(ka),Trt={zoom:function(){var r=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:r})},back:function(){this._dispatchZoomAction(prt(this.ecModel))}};function ow(r){var e={xAxisIndex:r.get("xAxisIndex",!0),yAxisIndex:r.get("yAxisIndex",!0),xAxisId:r.get("xAxisId",!0),yAxisId:r.get("yAxisId",!0)};return e.xAxisIndex==null&&e.xAxisId==null&&(e.xAxisIndex="all"),e.yAxisIndex==null&&e.yAxisId==null&&(e.yAxisIndex="all"),e}function Art(r,e){r.setIconStatus("back",yrt(e)>1?"emphasis":"normal")}function Drt(r,e,t,a,n){var i=t._isZoomActive;a&&a.type==="takeGlobalCursor"&&(i=a.key==="dataZoomSelect"?a.dataZoomSelectActive:!1),t._isZoomActive=i,r.setIconStatus("zoom",i?"emphasis":"normal");var o=new iw(ow(r),e,{include:["grid"]}),s=o.makePanelOpts(n,function(l){return l.xAxisDeclared&&!l.yAxisDeclared?"lineX":!l.xAxisDeclared&&l.yAxisDeclared?"lineY":"rect"});t._brushController.setPanels(s).enableBrush(i&&s.length?{brushType:"auto",brushStyle:r.getModel("brushStyle").getItemStyle()}:!1)}eU("dataZoom",function(r){var e=r.getComponent("toolbox",0),t=["feature","dataZoom"];if(!e||e.get(t)==null)return;var a=e.getModel(t),n=[],i=ow(a),o=Xf(r,i);KS(o.xAxisModels,function(l){return s(l,"xAxis","xAxisIndex")}),KS(o.yAxisModels,function(l){return s(l,"yAxis","yAxisIndex")});function s(l,u,f){var v=l.componentIndex,d={type:"select",$fromToolbox:!0,filterMode:a.get("filterMode",!0)||"filter",id:brt+u+v};d[f]=v,n.push(d)}return n});function Crt(r){r.registerComponentModel(Ket),r.registerComponentView(Jet),bu("saveAsImage",ert),bu("magicType",art),bu("dataView",hrt),bu("dataZoom",wrt),bu("restore",mrt),Ht($et)}var Mrt=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.type="tooltip",e.dependencies=["axisPointer"],e.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"#fff",shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#666",fontSize:14}},e})(jt);function Hk(r){var e=r.get("confine");return e!=null?!!e:r.get("renderMode")==="richText"}function Uk(r){if(Ft.domSupported){for(var e=document.documentElement.style,t=0,a=r.length;t-1?(s+="top:50%",l+="translateY(-50%) rotate("+(u=i==="left"?-225:-45)+"deg)"):(s+="left:50%",l+="translateX(-50%) rotate("+(u=i==="top"?225:45)+"deg)");var f=u*Math.PI/180,v=o+n,d=v*Math.abs(Math.cos(f))+v*Math.abs(Math.sin(f)),p=Math.round(((d-Math.SQRT2*n)/2+Math.SQRT2*n-(d-v)/2)*100)/100;s+=";"+i+":-"+p+"px";var y=e+" solid "+n+"px;",m=["position:absolute;width:"+o+"px;height:"+o+"px;z-index:-1;",s+";"+l+";","border-bottom:"+y,"border-right:"+y,"background-color:"+a+";"];return'
'}function Ort(r,e){var t="cubic-bezier(0.23,1,0.32,1)",a=" "+r/2+"s "+t,n="opacity"+a+",visibility"+a;return e||(a=" "+r+"s "+t,n+=Ft.transformSupported?","+sw+a:",left"+a+",top"+a),Rrt+":"+n}function bI(r,e,t){var a=r.toFixed(0)+"px",n=e.toFixed(0)+"px";if(!Ft.transformSupported)return t?"top:"+n+";left:"+a+";":[["top",n],["left",a]];var i=Ft.transform3dSupported,o="translate"+(i?"3d":"")+"("+a+","+n+(i?",0":"")+")";return t?"top:0;left:0;"+sw+":"+o+";":[["top",0],["left",0],[Fk,o]]}function zrt(r){var e=[],t=r.get("fontSize"),a=r.getTextColor();a&&e.push("color:"+a),e.push("font:"+r.getFont()),t&&e.push("line-height:"+Math.round(t*3/2)+"px");var n=r.get("textShadowColor"),i=r.get("textShadowBlur")||0,o=r.get("textShadowOffsetX")||0,s=r.get("textShadowOffsetY")||0;return n&&i&&e.push("text-shadow:"+o+"px "+s+"px "+i+"px "+n),P(["decoration","align"],function(l){var u=r.get(l);u&&e.push("text-"+l+":"+u)}),e.join(";")}function krt(r,e,t){var a=[],n=r.get("transitionDuration"),i=r.get("backgroundColor"),o=r.get("shadowBlur"),s=r.get("shadowColor"),l=r.get("shadowOffsetX"),u=r.get("shadowOffsetY"),f=r.getModel("textStyle"),v=iO(r,"html"),d=l+"px "+u+"px "+o+"px "+s;return a.push("box-shadow:"+d),e&&n&&a.push(Ort(n,t)),i&&a.push("background-color:"+i),P(["width","color","radius"],function(p){var y="border-"+p,m=AP(y),_=r.get(m);_!=null&&a.push(y+":"+_+(p==="color"?"":"px"))}),a.push(zrt(f)),v!=null&&a.push("padding:"+Ku(v).join("px ")+"px"),a.join(";")+";"}function wI(r,e,t,a,n){var i=e&&e.painter;if(t){var o=i&&i.getViewportRoot();o&&cG(r,o,document.body,a,n)}else{r[0]=a,r[1]=n;var s=i&&i.getViewportRootOffset();s&&(r[0]+=s.offsetLeft,r[1]+=s.offsetTop)}r[2]=r[0]/e.getWidth(),r[3]=r[1]/e.getHeight()}var Brt=(function(){function r(e,t,a){if(this._show=!1,this._styleCoord=[0,0,0,0],this._enterable=!0,this._alwaysShowContent=!1,this._firstShow=!0,this._longHide=!0,Ft.wxa)return null;var n=document.createElement("div");n.domBelongToZr=!0,this.el=n;var i=this._zr=t.getZr(),o=this._appendToBody=a&&a.appendToBody;wI(this._styleCoord,i,o,t.getWidth()/2,t.getHeight()/2),o?document.body.appendChild(n):e.appendChild(n),this._container=e;var s=this;n.onmouseenter=function(){s._enterable&&(clearTimeout(s._hideTimeout),s._show=!0),s._inContent=!0},n.onmousemove=function(l){if(l=l||window.event,!s._enterable){var u=i.handler,f=i.painter.getViewportRoot();Ia(f,l,!0),u.dispatch("mousemove",l)}},n.onmouseleave=function(){s._inContent=!1,s._enterable&&s._show&&s.hideLater(s._hideDelay)}}return r.prototype.update=function(e){var t=this._container,a=Ert(t,"position"),n=t.style;n.position!=="absolute"&&a!=="absolute"&&(n.position="relative");var i=e.get("alwaysShowContent");i&&this._moveIfResized(),this._alwaysShowContent=i,this.el.className=e.get("className")||""},r.prototype.show=function(e,t){clearTimeout(this._hideTimeout),clearTimeout(this._longHideTimeout);var a=this.el,n=a.style,i=this._styleCoord;a.innerHTML?n.cssText=Irt+krt(e,!this._firstShow,this._longHide)+bI(i[0],i[1],!0)+("border-color:"+al(t)+";")+(e.get("extraCssText")||"")+(";pointer-events:"+(this._enterable?"auto":"none")):n.display="none",this._show=!0,this._firstShow=!1,this._longHide=!1},r.prototype.setContent=function(e,t,a,n,i){var o=this.el;if(e==null){o.innerHTML="";return}var s="";if(vt(i)&&a.get("trigger")==="item"&&!Hk(a)&&(s=Prt(a,n,i)),vt(e))o.innerHTML=e+s;else if(e){o.innerHTML="",it(e)||(e=[e]);for(var l=0;l=0?this._tryShow(i,o):n==="leave"&&this._hide(o))},this))},e.prototype._keepShow=function(){var t=this._tooltipModel,a=this._ecModel,n=this._api,i=t.get("triggerOn");if(this._lastX!=null&&this._lastY!=null&&i!=="none"&&i!=="click"){var o=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){!n.isDisposed()&&o.manuallyShowTip(t,a,n,{x:o._lastX,y:o._lastY,dataByCoordSys:o._lastDataByCoordSys})})}},e.prototype.manuallyShowTip=function(t,a,n,i){if(!(i.from===this.uid||Ft.node||!n.getDom())){var o=DI(i,n);this._ticket="";var s=i.dataByCoordSys,l=Yrt(i,a,n);if(l){var u=l.el.getBoundingRect().clone();u.applyTransform(l.el.transform),this._tryShow({offsetX:u.x+u.width/2,offsetY:u.y+u.height/2,target:l.el,position:i.position,positionDefault:"bottom"},o)}else if(i.tooltip&&i.x!=null&&i.y!=null){var f=Grt;f.x=i.x,f.y=i.y,f.update(),Rt(f).tooltipConfig={name:null,option:i.tooltip},this._tryShow({offsetX:i.x,offsetY:i.y,target:f},o)}else if(s)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,dataByCoordSys:s,tooltipOption:i.tooltipOption},o);else if(i.seriesIndex!=null){if(this._manuallyAxisShowTip(t,a,n,i))return;var v=Lk(i,a),d=v.point[0],p=v.point[1];d!=null&&p!=null&&this._tryShow({offsetX:d,offsetY:p,target:v.el,position:i.position,positionDefault:"bottom"},o)}else i.x!=null&&i.y!=null&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target},o))}},e.prototype.manuallyHideTip=function(t,a,n,i){var o=this._tooltipContent;this._tooltipModel&&o.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,i.from!==this.uid&&this._hide(DI(i,n))},e.prototype._manuallyAxisShowTip=function(t,a,n,i){var o=i.seriesIndex,s=i.dataIndex,l=a.getComponent("axisPointer").coordSysAxesInfo;if(!(o==null||s==null||l==null)){var u=a.getSeriesByIndex(o);if(u){var f=u.getData(),v=Tf([f.getItemModel(s),u,(u.coordinateSystem||{}).model],this._tooltipModel);if(v.get("trigger")==="axis")return n.dispatchAction({type:"updateAxisPointer",seriesIndex:o,dataIndex:s,position:i.position}),!0}}},e.prototype._tryShow=function(t,a){var n=t.target,i=this._tooltipModel;if(i){this._lastX=t.offsetX,this._lastY=t.offsetY;var o=t.dataByCoordSys;if(o&&o.length)this._showAxisTooltip(o,t);else if(n){this._lastDataByCoordSys=null;var s,l;Vs(n,function(u){if(Rt(u).dataIndex!=null)return s=u,!0;if(Rt(u).tooltipConfig!=null)return l=u,!0},!0),s?this._showSeriesItemTooltip(t,s,a):l?this._showComponentItemTooltip(t,l,a):this._hide(a)}else this._lastDataByCoordSys=null,this._hide(a)}},e.prototype._showOrMove=function(t,a){var n=t.get("showDelay");a=dt(a,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(a,n):a()},e.prototype._showAxisTooltip=function(t,a){var n=this._ecModel,i=this._tooltipModel,o=[a.offsetX,a.offsetY],s=Tf([a.tooltipOption],i),l=this._renderMode,u=[],f=ir("section",{blocks:[],noHeader:!0}),v=[],d=new H1;P(t,function(b){P(b.dataByAxis,function(w){var A=n.getComponent(w.axisDim+"Axis",w.axisIndex),M=w.value;if(!(!A||M==null)){var C=Ak(M,A.axis,n,w.seriesDataIndices,w.valueLabelOpt),L=ir("section",{header:C,noHeader:!rn(C),sortBlocks:!0,blocks:[]});f.blocks.push(L),P(w.seriesDataIndices,function(E){var R=n.getSeriesByIndex(E.seriesIndex),N=E.dataIndexInside,O=R.getDataParams(N);if(!(O.dataIndex<0)){O.axisDim=w.axisDim,O.axisIndex=w.axisIndex,O.axisType=w.axisType,O.axisId=w.axisId,O.axisValue=u2(A.axis,{value:M}),O.axisValueLabel=C,O.marker=d.makeTooltipMarker("item",al(O.color),l);var k=vL(R.formatTooltip(N,!0,null)),G=k.frag;if(G){var H=Tf([R],i).get("valueFormatter");L.blocks.push(H?et({valueFormatter:H},G):G)}k.text&&v.push(k.text),u.push(O)}})}})}),f.blocks.reverse(),v.reverse();var p=a.position,y=s.get("order"),m=_L(f,d,l,y,n.get("useUTC"),s.get("textStyle"));m&&v.unshift(m);var _=l==="richText"?` + +`:"
",S=v.join(_);this._showOrMove(s,function(){this._updateContentNotChangedOnAxis(t,u)?this._updatePosition(s,p,o[0],o[1],this._tooltipContent,u):this._showTooltipContent(s,S,u,Math.random()+"",o[0],o[1],p,null,d)})},e.prototype._showSeriesItemTooltip=function(t,a,n){var i=this._ecModel,o=Rt(a),s=o.seriesIndex,l=i.getSeriesByIndex(s),u=o.dataModel||l,f=o.dataIndex,v=o.dataType,d=u.getData(v),p=this._renderMode,y=t.positionDefault,m=Tf([d.getItemModel(f),u,l&&(l.coordinateSystem||{}).model],this._tooltipModel,y?{position:y}:null),_=m.get("trigger");if(!(_!=null&&_!=="item")){var S=u.getDataParams(f,v),b=new H1;S.marker=b.makeTooltipMarker("item",al(S.color),p);var w=vL(u.formatTooltip(f,!1,v)),A=m.get("order"),M=m.get("valueFormatter"),C=w.frag,L=C?_L(M?et({valueFormatter:M},C):C,b,p,A,i.get("useUTC"),m.get("textStyle")):w.text,E="item_"+u.name+"_"+f;this._showOrMove(m,function(){this._showTooltipContent(m,L,S,E,t.offsetX,t.offsetY,t.position,t.target,b)}),n({type:"showTip",dataIndexInside:f,dataIndex:d.getRawIndex(f),seriesIndex:s,from:this.uid})}},e.prototype._showComponentItemTooltip=function(t,a,n){var i=Rt(a),o=i.tooltipConfig,s=o.option||{};if(vt(s)){var l=s;s={content:l,formatter:l}}var u=[s],f=this._ecModel.getComponent(i.componentMainType,i.componentIndex);f&&u.push(f),u.push({formatter:s.content});var v=t.positionDefault,d=Tf(u,this._tooltipModel,v?{position:v}:null),p=d.get("content"),y=Math.random()+"",m=new H1;this._showOrMove(d,function(){var _=Dt(d.get("formatterParams")||{});this._showTooltipContent(d,p,_,y,t.offsetX,t.offsetY,t.position,a,m)}),n({type:"showTip",from:this.uid})},e.prototype._showTooltipContent=function(t,a,n,i,o,s,l,u,f){if(this._ticket="",!(!t.get("showContent")||!t.get("show"))){var v=this._tooltipContent;v.setEnterable(t.get("enterable"));var d=t.get("formatter");l=l||t.get("position");var p=a,y=this._getNearestPoint([o,s],n,t.get("trigger"),t.get("borderColor")),m=y.color;if(d)if(vt(d)){var _=t.ecModel.get("useUTC"),S=it(n)?n[0]:n,b=S&&S.axisType&&S.axisType.indexOf("time")>=0;p=d,b&&(p=oy(S.axisValue,p,_)),p=DP(p,n,!0)}else if(bt(d)){var w=dt(function(A,M){A===this._ticket&&(v.setContent(M,f,t,m,l),this._updatePosition(t,l,o,s,v,n,u))},this);this._ticket=i,p=d(n,i,w)}else p=d;v.setContent(p,f,t,m,l),v.show(t,m),this._updatePosition(t,l,o,s,v,n,u)}},e.prototype._getNearestPoint=function(t,a,n,i){if(n==="axis"||it(a))return{color:i||(this._renderMode==="html"?"#fff":"none")};if(!it(a))return{color:i||a.color||a.borderColor}},e.prototype._updatePosition=function(t,a,n,i,o,s,l){var u=this._api.getWidth(),f=this._api.getHeight();a=a||t.get("position");var v=o.getSize(),d=t.get("align"),p=t.get("verticalAlign"),y=l&&l.getBoundingRect().clone();if(l&&y.applyTransform(l.transform),bt(a)&&(a=a([n,i],s,o.el,y,{viewSize:[u,f],contentSize:v.slice()})),it(a))n=ft(a[0],u),i=ft(a[1],f);else if(Tt(a)){var m=a;m.width=v[0],m.height=v[1];var _=Qe(m,{width:u,height:f});n=_.x,i=_.y,d=null,p=null}else if(vt(a)&&l){var S=jrt(a,y,v,t.get("borderWidth"));n=S[0],i=S[1]}else{var S=Urt(n,i,o,u,f,d?null:20,p?null:20);n=S[0],i=S[1]}if(d&&(n-=CI(d)?v[0]/2:d==="right"?v[0]:0),p&&(i-=CI(p)?v[1]/2:p==="bottom"?v[1]:0),Hk(t)){var S=Frt(n,i,o,u,f);n=S[0],i=S[1]}o.moveTo(n,i)},e.prototype._updateContentNotChangedOnAxis=function(t,a){var n=this._lastDataByCoordSys,i=this._cbParamsList,o=!!n&&n.length===t.length;return o&&P(n,function(s,l){var u=s.dataByAxis||[],f=t[l]||{},v=f.dataByAxis||[];o=o&&u.length===v.length,o&&P(u,function(d,p){var y=v[p]||{},m=d.seriesDataIndices||[],_=y.seriesDataIndices||[];o=o&&d.value===y.value&&d.axisType===y.axisType&&d.axisId===y.axisId&&m.length===_.length,o&&P(m,function(S,b){var w=_[b];o=o&&S.seriesIndex===w.seriesIndex&&S.dataIndex===w.dataIndex}),i&&P(d.seriesDataIndices,function(S){var b=S.seriesIndex,w=a[b],A=i[b];w&&A&&A.data!==w.data&&(o=!1)})})}),this._lastDataByCoordSys=t,this._cbParamsList=a,!!o},e.prototype._hide=function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},e.prototype.dispose=function(t,a){Ft.node||!a.getDom()||(gh(this,"_updatePosition"),this._tooltipContent.dispose(),XS("itemTooltip",a))},e.type="tooltip",e})(Ee);function Tf(r,e,t){var a=e.ecModel,n;t?(n=new oe(t,a,a),n=new oe(e.option,n,a)):n=e;for(var i=r.length-1;i>=0;i--){var o=r[i];o&&(o instanceof oe&&(o=o.get("tooltip",!0)),vt(o)&&(o={formatter:o}),o&&(n=new oe(o,n,a)))}return n}function DI(r,e){return r.dispatchAction||dt(e.dispatchAction,e)}function Urt(r,e,t,a,n,i,o){var s=t.getSize(),l=s[0],u=s[1];return i!=null&&(r+l+i+2>a?r-=l+i:r+=i),o!=null&&(e+u+o>n?e-=u+o:e+=o),[r,e]}function Frt(r,e,t,a,n){var i=t.getSize(),o=i[0],s=i[1];return r=Math.min(r+o,a)-o,e=Math.min(e+s,n)-s,r=Math.max(r,0),e=Math.max(e,0),[r,e]}function jrt(r,e,t,a){var n=t[0],i=t[1],o=Math.ceil(Math.SQRT2*a)+8,s=0,l=0,u=e.width,f=e.height;switch(r){case"inside":s=e.x+u/2-n/2,l=e.y+f/2-i/2;break;case"top":s=e.x+u/2-n/2,l=e.y-i-o;break;case"bottom":s=e.x+u/2-n/2,l=e.y+f+o;break;case"left":s=e.x-n-o,l=e.y+f/2-i/2;break;case"right":s=e.x+u+o,l=e.y+f/2-i/2}return[s,l]}function CI(r){return r==="center"||r==="middle"}function Yrt(r,e,t){var a=Ab(r).queryOptionMap,n=a.keys()[0];if(!(!n||n==="series")){var i=Ph(e,n,a.get(n),{useDefault:!1,enableAll:!1,enableNone:!1}),o=i.models[0];if(o){var s=t.getViewOfComponentModel(o),l;if(s.group.traverse(function(u){var f=Rt(u).tooltipConfig;if(f&&f.name===r.name)return l=u,!0}),l)return{componentMainType:n,componentIndex:o.componentIndex,el:l}}}}function Xrt(r){Ht(tv),r.registerComponentModel(Mrt),r.registerComponentView(Hrt),r.registerAction({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},Ge),r.registerAction({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},Ge)}var Zrt=["rect","polygon","keep","clear"];function Wrt(r,e){var t=he(r?r.brush:[]);if(t.length){var a=[];P(t,function(l){var u=l.hasOwnProperty("toolbox")?l.toolbox:[];u instanceof Array&&(a=a.concat(u))});var n=r&&r.toolbox;it(n)&&(n=n[0]),n||(n={feature:{}},r.toolbox=[n]);var i=n.feature||(n.feature={}),o=i.brush||(i.brush={}),s=o.type||(o.type=[]);s.push.apply(s,a),qrt(s),e&&!s.length&&s.push.apply(s,Zrt)}}function qrt(r){var e={};P(r,function(t){e[t]=1}),r.length=0,P(e,function(t,a){r.push(a)})}var MI=P;function LI(r){if(r){for(var e in r)if(r.hasOwnProperty(e))return!0}}function QS(r,e,t){var a={};return MI(e,function(i){var o=a[i]=n();MI(r[i],function(s,l){if(ar.isValidType(l)){var u={type:l,visual:s};t&&t(u,i),o[l]=new ar(u),l==="opacity"&&(u=Dt(u),u.type="colorAlpha",o.__hidden.__alphaForOpacity=new ar(u))}})}),a;function n(){var i=function(){};i.prototype.__hidden=i.prototype;var o=new i;return o}}function Yk(r,e,t){var a;P(t,function(n){e.hasOwnProperty(n)&&LI(e[n])&&(a=!0)}),a&&P(t,function(n){e.hasOwnProperty(n)&&LI(e[n])?r[n]=Dt(e[n]):delete r[n]})}function $rt(r,e,t,a,n,i){var o={};P(r,function(v){var d=ar.prepareVisualTypes(e[v]);o[v]=d});var s;function l(v){return Jb(t,s,v)}function u(v,d){pO(t,s,v,d)}t.each(f);function f(v,d){s=v;var p=t.getRawDataItem(s);if(!(p&&p.visualMap===!1))for(var y=a.call(n,v),m=e[y],_=o[y],S=0,b=_.length;Se[0][1]&&(e[0][1]=i[0]),i[1]e[1][1]&&(e[1][1]=i[1])}return e&&PI(e)}};function PI(r){return new kt(r[0][0],r[1][0],r[0][1]-r[0][0],r[1][1]-r[1][0])}var nat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.init=function(t,a){this.ecModel=t,this.api=a,this.model,(this._brushController=new P2(a.getZr())).on("brush",dt(this._onBrush,this)).mount()},e.prototype.render=function(t,a,n,i){this.model=t,this._updateController(t,a,n,i)},e.prototype.updateTransform=function(t,a,n,i){Xk(a),this._updateController(t,a,n,i)},e.prototype.updateVisual=function(t,a,n,i){this.updateTransform(t,a,n,i)},e.prototype.updateView=function(t,a,n,i){this._updateController(t,a,n,i)},e.prototype._updateController=function(t,a,n,i){(!i||i.$from!==t.id)&&this._brushController.setPanels(t.brushTargetManager.makePanelOpts(n)).enableBrush(t.brushOption).updateCovers(t.areas.slice())},e.prototype.dispose=function(){this._brushController.dispose()},e.prototype._onBrush=function(t){var a=this.model.id,n=this.model.brushTargetManager.setOutputRanges(t.areas,this.ecModel);(!t.isEnd||t.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:a,areas:Dt(n),$from:a}),t.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:a,areas:Dt(n),$from:a})},e.type="brush",e})(Ee),iat="#ddd",oat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.areas=[],t.brushOption={},t}return e.prototype.optionUpdated=function(t,a){var n=this.option;!a&&Yk(n,t,["inBrush","outOfBrush"]);var i=n.inBrush=n.inBrush||{};n.outOfBrush=n.outOfBrush||{color:iat},i.hasOwnProperty("liftZ")||(i.liftZ=5)},e.prototype.setAreas=function(t){t&&(this.areas=st(t,function(a){return OI(this.option,a)},this))},e.prototype.setBrushOption=function(t){this.brushOption=OI(this.option,t),this.brushType=this.brushOption.brushType},e.type="brush",e.dependencies=["geo","grid","xAxis","yAxis","parallel","series"],e.defaultOption={seriesIndex:"all",brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(210,219,238,0.3)",borderColor:"#D2DBEE"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},e})(jt);function OI(r,e){return zt({brushType:r.brushType,brushMode:r.brushMode,transformable:r.transformable,brushStyle:new oe(r.brushStyle).getItemStyle(),removeOnClick:r.removeOnClick,z:r.z},e,!0)}var sat=["rect","polygon","lineX","lineY","keep","clear"],lat=(function(r){$(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.render=function(t,a,n){var i,o,s;a.eachComponent({mainType:"brush"},function(l){i=l.brushType,o=l.brushOption.brushMode||"single",s=s||!!l.areas.length}),this._brushType=i,this._brushMode=o,P(t.get("type",!0),function(l){t.setIconStatus(l,(l==="keep"?o==="multiple":l==="clear"?s:l===i)?"emphasis":"normal")})},e.prototype.updateView=function(t,a,n){this.render(t,a,n)},e.prototype.getIcons=function(){var t=this.model,a=t.get("icon",!0),n={};return P(t.get("type",!0),function(i){a[i]&&(n[i]=a[i])}),n},e.prototype.onclick=function(t,a,n){var i=this._brushType,o=this._brushMode;n==="clear"?(a.dispatchAction({type:"axisAreaSelect",intervals:[]}),a.dispatchAction({type:"brush",command:"clear",areas:[]})):a.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:n==="keep"?i:i===n?!1:n,brushMode:n==="keep"?o==="multiple"?"single":"multiple":o}})},e.getDefaultOption=function(t){var a={show:!0,type:sat.slice(),icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:t.getLocaleModel().get(["toolbox","brush","title"])};return a},e})(ka);function uat(r){r.registerComponentView(nat),r.registerComponentModel(oat),r.registerPreprocessor(Wrt),r.registerVisual(r.PRIORITY.VISUAL.BRUSH,Jrt),r.registerAction({type:"brush",event:"brush",update:"updateVisual"},function(e,t){t.eachComponent({mainType:"brush",query:e},function(a){a.setAreas(e.areas)})}),r.registerAction({type:"brushSelect",event:"brushSelected",update:"none"},Ge),r.registerAction({type:"brushEnd",event:"brushEnd",update:"none"},Ge),bu("brush",lat)}var cat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.layoutMode={type:"box",ignoreSize:!0},t}return e.type="title",e.defaultOption={z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bold",color:"#464646"},subtextStyle:{fontSize:12,color:"#6E7079"}},e})(jt),fat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.render=function(t,a,n){if(this.group.removeAll(),!!t.get("show")){var i=this.group,o=t.getModel("textStyle"),s=t.getModel("subtextStyle"),l=t.get("textAlign"),u=Ot(t.get("textBaseline"),t.get("textVerticalAlign")),f=new $t({style:xe(o,{text:t.get("text"),fill:o.getTextColor()},{disableBox:!0}),z2:10}),v=f.getBoundingRect(),d=t.get("subtext"),p=new $t({style:xe(s,{text:d,fill:s.getTextColor(),y:v.height+t.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),y=t.get("link"),m=t.get("sublink"),_=t.get("triggerEvent",!0);f.silent=!y&&!_,p.silent=!m&&!_,y&&f.on("click",function(){ug(y,"_"+t.get("target"))}),m&&p.on("click",function(){ug(m,"_"+t.get("subtarget"))}),Rt(f).eventData=Rt(p).eventData=_?{componentType:"title",componentIndex:t.componentIndex}:null,i.add(f),d&&i.add(p);var S=i.getBoundingRect(),b=t.getBoxLayoutParams();b.width=S.width,b.height=S.height;var w=Qe(b,{width:n.getWidth(),height:n.getHeight()},t.get("padding"));l||(l=t.get("left")||t.get("right"),l==="middle"&&(l="center"),l==="right"?w.x+=w.width:l==="center"&&(w.x+=w.width/2)),u||(u=t.get("top")||t.get("bottom"),u==="center"&&(u="middle"),u==="bottom"?w.y+=w.height:u==="middle"&&(w.y+=w.height/2),u=u||"top"),i.x=w.x,i.y=w.y,i.markRedraw();var A={align:l,verticalAlign:u};f.setStyle(A),p.setStyle(A),S=i.getBoundingRect();var M=w.margin,C=t.getItemStyle(["color","opacity"]);C.fill=t.get("backgroundColor");var L=new Wt({shape:{x:S.x-M[3],y:S.y-M[0],width:S.width+M[1]+M[3],height:S.height+M[0]+M[2],r:t.get("borderRadius")},style:C,subPixelOptimize:!0,silent:!0});i.add(L)}},e.type="title",e})(Ee);function hat(r){r.registerComponentModel(cat),r.registerComponentView(fat)}var zI=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.layoutMode="box",t}return e.prototype.init=function(t,a,n){this.mergeDefaultAndTheme(t,n),this._initData()},e.prototype.mergeOption=function(t){r.prototype.mergeOption.apply(this,arguments),this._initData()},e.prototype.setCurrentIndex=function(t){t==null&&(t=this.option.currentIndex);var a=this._data.count();this.option.loop?t=(t%a+a)%a:(t>=a&&(t=a-1),t<0&&(t=0)),this.option.currentIndex=t},e.prototype.getCurrentIndex=function(){return this.option.currentIndex},e.prototype.isIndexMax=function(){return this.getCurrentIndex()>=this._data.count()-1},e.prototype.setPlayState=function(t){this.option.autoPlay=!!t},e.prototype.getPlayState=function(){return!!this.option.autoPlay},e.prototype._initData=function(){var t=this.option,a=t.data||[],n=t.axisType,i=this._names=[],o;n==="category"?(o=[],P(a,function(u,f){var v=Ke(Yu(u),""),d;Tt(u)?(d=Dt(u),d.value=f):d=f,o.push(d),i.push(v)})):o=a;var s={category:"ordinal",time:"time",value:"number"}[n]||"number",l=this._data=new Pr([{name:"value",type:s}],this);l.initData(o,i)},e.prototype.getData=function(){return this._data},e.prototype.getCategories=function(){if(this.get("axisType")==="category")return this._names.slice()},e.type="timeline",e.defaultOption={z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:"#000"},data:[]},e})(jt),Zk=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.type="timeline.slider",e.defaultOption=zo(zI.defaultOption,{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"circle",symbolSize:12,lineStyle:{show:!0,width:2,color:"#DAE1F5"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#A4B1D7"},itemStyle:{color:"#A4B1D7",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:15,color:"#316bf3",borderColor:"#fff",borderWidth:2,shadowBlur:2,shadowOffsetX:1,shadowOffsetY:1,shadowColor:"rgba(0, 0, 0, 0.3)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:24,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"M2,18.5A1.52,1.52,0,0,1,.92,18a1.49,1.49,0,0,1,0-2.12L7.81,9.36,1,3.11A1.5,1.5,0,1,1,3,.89l8,7.34a1.48,1.48,0,0,1,.49,1.09,1.51,1.51,0,0,1-.46,1.1L3,18.08A1.5,1.5,0,0,1,2,18.5Z",prevIcon:"M10,.5A1.52,1.52,0,0,1,11.08,1a1.49,1.49,0,0,1,0,2.12L4.19,9.64,11,15.89a1.5,1.5,0,1,1-2,2.22L1,10.77A1.48,1.48,0,0,1,.5,9.68,1.51,1.51,0,0,1,1,8.58L9,.92A1.5,1.5,0,0,1,10,.5Z",prevBtnSize:18,nextBtnSize:18,color:"#A4B1D7",borderColor:"#A4B1D7",borderWidth:1},emphasis:{label:{show:!0,color:"#6f778d"},itemStyle:{color:"#316BF3"},controlStyle:{color:"#316BF3",borderColor:"#316BF3",borderWidth:2}},progress:{lineStyle:{color:"#316BF3"},itemStyle:{color:"#316BF3"},label:{color:"#6f778d"}},data:[]}),e})(zI);Xe(Zk,$b.prototype);var vat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.type="timeline",e})(Ee),dat=(function(r){$(e,r);function e(t,a,n,i){var o=r.call(this,t,a,n)||this;return o.type=i||"value",o}return e.prototype.getLabelModel=function(){return this.model.getModel("label")},e.prototype.isHorizontal=function(){return this.model.get("orient")==="horizontal"},e})(hn),ax=Math.PI,kI=Kt(),pat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.init=function(t,a){this.api=a},e.prototype.render=function(t,a,n){if(this.model=t,this.api=n,this.ecModel=a,this.group.removeAll(),t.get("show",!0)){var i=this._layout(t,n),o=this._createGroup("_mainGroup"),s=this._createGroup("_labelGroup"),l=this._axis=this._createAxis(i,t);t.formatTooltip=function(u){var f=l.scale.getLabel({value:u});return ir("nameValue",{noName:!0,value:f})},P(["AxisLine","AxisTick","Control","CurrentPointer"],function(u){this["_render"+u](i,o,l,t)},this),this._renderAxisLabel(i,s,l,t),this._position(i,t)}this._doPlayStop(),this._updateTicksStatus()},e.prototype.remove=function(){this._clearTimer(),this.group.removeAll()},e.prototype.dispose=function(){this._clearTimer()},e.prototype._layout=function(t,a){var n=t.get(["label","position"]),i=t.get("orient"),o=yat(t,a),s;n==null||n==="auto"?s=i==="horizontal"?o.y+o.height/2=0||s==="+"?"left":"right"},u={horizontal:s>=0||s==="+"?"top":"bottom",vertical:"middle"},f={horizontal:0,vertical:ax/2},v=i==="vertical"?o.height:o.width,d=t.getModel("controlStyle"),p=d.get("show",!0),y=p?d.get("itemSize"):0,m=p?d.get("itemGap"):0,_=y+m,S=t.get(["label","rotate"])||0;S=S*ax/180;var b,w,A,M=d.get("position",!0),C=p&&d.get("showPlayBtn",!0),L=p&&d.get("showPrevBtn",!0),E=p&&d.get("showNextBtn",!0),R=0,N=v;M==="left"||M==="bottom"?(C&&(b=[0,0],R+=_),L&&(w=[R,0],R+=_),E&&(A=[N-y,0],N-=_)):(C&&(b=[N-y,0],N-=_),L&&(w=[0,0],R+=_),E&&(A=[N-y,0],N-=_));var O=[R,N];return t.get("inverse")&&O.reverse(),{viewRect:o,mainLength:v,orient:i,rotation:f[i],labelRotation:S,labelPosOpt:s,labelAlign:t.get(["label","align"])||l[i],labelBaseline:t.get(["label","verticalAlign"])||t.get(["label","baseline"])||u[i],playPosition:b,prevBtnPosition:w,nextBtnPosition:A,axisExtent:O,controlSize:y,controlGap:m}},e.prototype._position=function(t,a){var n=this._mainGroup,i=this._labelGroup,o=t.viewRect;if(t.orient==="vertical"){var s=Ua(),l=o.x,u=o.y+o.height;Pn(s,s,[-l,-u]),sl(s,s,-ax/2),Pn(s,s,[l,u]),o=o.clone(),o.applyTransform(s)}var f=b(o),v=b(n.getBoundingRect()),d=b(i.getBoundingRect()),p=[n.x,n.y],y=[i.x,i.y];y[0]=p[0]=f[0][0];var m=t.labelPosOpt;if(m==null||vt(m)){var _=m==="+"?0:1;w(p,v,f,1,_),w(y,d,f,1,1-_)}else{var _=m>=0?0:1;w(p,v,f,1,_),y[1]=p[1]+m}n.setPosition(p),i.setPosition(y),n.rotation=i.rotation=t.rotation,S(n),S(i);function S(A){A.originX=f[0][0]-A.x,A.originY=f[1][0]-A.y}function b(A){return[[A.x,A.x+A.width],[A.y,A.y+A.height]]}function w(A,M,C,L,E){A[L]+=C[L][E]-M[L][E]}},e.prototype._createAxis=function(t,a){var n=a.getData(),i=a.get("axisType"),o=gat(a,i);o.getTicks=function(){return n.mapArray(["value"],function(u){return{value:u}})};var s=n.getDataExtent("value");o.setExtent(s[0],s[1]),o.calcNiceTicks();var l=new dat("value",o,t.axisExtent,i);return l.model=a,l},e.prototype._createGroup=function(t){var a=this[t]=new Ct;return this.group.add(a),a},e.prototype._renderAxisLine=function(t,a,n,i){var o=n.getExtent();if(i.get(["lineStyle","show"])){var s=new er({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:et({lineCap:"round"},i.getModel("lineStyle").getLineStyle()),silent:!0,z2:1});a.add(s);var l=this._progressLine=new er({shape:{x1:o[0],x2:this._currentPointer?this._currentPointer.x:o[0],y1:0,y2:0},style:wt({lineCap:"round",lineWidth:s.style.lineWidth},i.getModel(["progress","lineStyle"]).getLineStyle()),silent:!0,z2:1});a.add(l)}},e.prototype._renderAxisTick=function(t,a,n,i){var o=this,s=i.getData(),l=n.scale.getTicks();this._tickSymbols=[],P(l,function(u){var f=n.dataToCoord(u.value),v=s.getItemModel(u.value),d=v.getModel("itemStyle"),p=v.getModel(["emphasis","itemStyle"]),y=v.getModel(["progress","itemStyle"]),m={x:f,y:0,onclick:dt(o._changeTimeline,o,u.value)},_=BI(v,d,a,m);_.ensureState("emphasis").style=p.getItemStyle(),_.ensureState("progress").style=y.getItemStyle(),Zs(_);var S=Rt(_);v.get("tooltip")?(S.dataIndex=u.value,S.dataModel=i):S.dataIndex=S.dataModel=null,o._tickSymbols.push(_)})},e.prototype._renderAxisLabel=function(t,a,n,i){var o=this,s=n.getLabelModel();if(s.get("show")){var l=i.getData(),u=n.getViewLabels();this._tickLabels=[],P(u,function(f){var v=f.tickValue,d=l.getItemModel(v),p=d.getModel("label"),y=d.getModel(["emphasis","label"]),m=d.getModel(["progress","label"]),_=n.dataToCoord(f.tickValue),S=new $t({x:_,y:0,rotation:t.labelRotation-t.rotation,onclick:dt(o._changeTimeline,o,v),silent:!1,style:xe(p,{text:f.formattedLabel,align:t.labelAlign,verticalAlign:t.labelBaseline})});S.ensureState("emphasis").style=xe(y),S.ensureState("progress").style=xe(m),a.add(S),Zs(S),kI(S).dataIndex=v,o._tickLabels.push(S)})}},e.prototype._renderControl=function(t,a,n,i){var o=t.controlSize,s=t.rotation,l=i.getModel("controlStyle").getItemStyle(),u=i.getModel(["emphasis","controlStyle"]).getItemStyle(),f=i.getPlayState(),v=i.get("inverse",!0);d(t.nextBtnPosition,"next",dt(this._changeTimeline,this,v?"-":"+")),d(t.prevBtnPosition,"prev",dt(this._changeTimeline,this,v?"+":"-")),d(t.playPosition,f?"stop":"play",dt(this._handlePlayClick,this,!f),!0);function d(p,y,m,_){if(p){var S=ln(Ot(i.get(["controlStyle",y+"BtnSize"]),o),o),b=[0,-S/2,S,S],w=mat(i,y+"Icon",b,{x:p[0],y:p[1],originX:o/2,originY:0,rotation:_?-s:0,rectHover:!0,style:l,onclick:m});w.ensureState("emphasis").style=u,a.add(w),Zs(w)}}},e.prototype._renderCurrentPointer=function(t,a,n,i){var o=i.getData(),s=i.getCurrentIndex(),l=o.getItemModel(s).getModel("checkpointStyle"),u=this,f={onCreate:function(v){v.draggable=!0,v.drift=dt(u._handlePointerDrag,u),v.ondragend=dt(u._handlePointerDragend,u),VI(v,u._progressLine,s,n,i,!0)},onUpdate:function(v){VI(v,u._progressLine,s,n,i)}};this._currentPointer=BI(l,l,this._mainGroup,{},this._currentPointer,f)},e.prototype._handlePlayClick=function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},e.prototype._handlePointerDrag=function(t,a,n){this._clearTimer(),this._pointerChangeTimeline([n.offsetX,n.offsetY])},e.prototype._handlePointerDragend=function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},e.prototype._pointerChangeTimeline=function(t,a){var n=this._toAxisCoord(t)[0],i=this._axis,o=Ga(i.getExtent().slice());n>o[1]&&(n=o[1]),n=0&&(o[i]=+o[i].toFixed(d)),[o,v]}var nx={min:It(mp,"min"),max:It(mp,"max"),average:It(mp,"average"),median:It(mp,"median")};function Eh(r,e){if(e){var t=r.getData(),a=r.coordinateSystem,n=a&&a.dimensions;if(!Tat(e)&&!it(e.coord)&&it(n)){var i=Wk(e,t,a,r);if(e=Dt(e),e.type&&nx[e.type]&&i.baseAxis&&i.valueAxis){var o=Vt(n,i.baseAxis.dim),s=Vt(n,i.valueAxis.dim),l=nx[e.type](t,i.baseDataDim,i.valueDataDim,o,s);e.coord=l[0],e.value=l[1]}else e.coord=[e.xAxis!=null?e.xAxis:e.radiusAxis,e.yAxis!=null?e.yAxis:e.angleAxis]}if(e.coord==null||!it(n))e.coord=[];else for(var u=e.coord,f=0;f<2;f++)nx[u[f]]&&(u[f]=uw(t,t.mapDimension(n[f]),u[f]));return e}}function Wk(r,e,t,a){var n={};return r.valueIndex!=null||r.valueDim!=null?(n.valueDataDim=r.valueIndex!=null?e.getDimension(r.valueIndex):r.valueDim,n.valueAxis=t.getAxis(Aat(a,n.valueDataDim)),n.baseAxis=t.getOtherAxis(n.valueAxis),n.baseDataDim=e.mapDimension(n.baseAxis.dim)):(n.baseAxis=a.getBaseAxis(),n.valueAxis=t.getOtherAxis(n.baseAxis),n.baseDataDim=e.mapDimension(n.baseAxis.dim),n.valueDataDim=e.mapDimension(n.valueAxis.dim)),n}function Aat(r,e){var t=r.getData().getDimensionInfo(e);return t&&t.coordDim}function Rh(r,e){return r&&r.containData&&e.coord&&!tb(e)?r.containData(e.coord):!0}function Dat(r,e,t){return r&&r.containZone&&e.coord&&t.coord&&!tb(e)&&!tb(t)?r.containZone(e.coord,t.coord):!0}function qk(r,e){return r?function(t,a,n,i){var o=i<2?t.coord&&t.coord[i]:t.value;return To(o,e[i])}:function(t,a,n,i){return To(t.value,e[i])}}function uw(r,e,t){if(t==="average"){var a=0,n=0;return r.each(e,function(i,o){isNaN(i)||(a+=i,n++)}),a/n}else return t==="median"?r.getMedian(e):r.getDataExtent(e)[t==="max"?1:0]}var ix=Kt(),cw=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.init=function(){this.markerGroupMap=xt()},e.prototype.render=function(t,a,n){var i=this,o=this.markerGroupMap;o.each(function(s){ix(s).keep=!1}),a.eachSeries(function(s){var l=Ti.getMarkerModelFromSeries(s,i.type);l&&i.renderSeries(s,l,a,n)}),o.each(function(s){!ix(s).keep&&i.group.remove(s.group)})},e.prototype.markKeep=function(t){ix(t).keep=!0},e.prototype.toggleBlurSeries=function(t,a){var n=this;P(t,function(i){var o=Ti.getMarkerModelFromSeries(i,n.type);if(o){var s=o.getData();s.eachItemGraphicEl(function(l){l&&(a?U3(l):Rb(l))})}})},e.type="marker",e})(Ee);function HI(r,e,t){var a=e.coordinateSystem;r.each(function(n){var i=r.getItemModel(n),o,s=ft(i.get("x"),t.getWidth()),l=ft(i.get("y"),t.getHeight());if(!isNaN(s)&&!isNaN(l))o=[s,l];else if(e.getMarkerPosition)o=e.getMarkerPosition(r.getValues(r.dimensions,n));else if(a){var u=r.get(a.dimensions[0],n),f=r.get(a.dimensions[1],n);o=a.dataToPoint([u,f])}isNaN(s)||(o[0]=s),isNaN(l)||(o[1]=l),r.setItemLayout(n,o)})}var Cat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.updateTransform=function(t,a,n){a.eachSeries(function(i){var o=Ti.getMarkerModelFromSeries(i,"markPoint");o&&(HI(o.getData(),i,n),this.markerGroupMap.get(i.id).updateLayout())},this)},e.prototype.renderSeries=function(t,a,n,i){var o=t.coordinateSystem,s=t.id,l=t.getData(),u=this.markerGroupMap,f=u.get(s)||u.set(s,new Wh),v=Mat(o,t,a);a.setData(v),HI(a.getData(),t,i),v.each(function(d){var p=v.getItemModel(d),y=p.getShallow("symbol"),m=p.getShallow("symbolSize"),_=p.getShallow("symbolRotate"),S=p.getShallow("symbolOffset"),b=p.getShallow("symbolKeepAspect");if(bt(y)||bt(m)||bt(_)||bt(S)){var w=a.getRawValue(d),A=a.getDataParams(d);bt(y)&&(y=y(w,A)),bt(m)&&(m=m(w,A)),bt(_)&&(_=_(w,A)),bt(S)&&(S=S(w,A))}var M=p.getModel("itemStyle").getItemStyle(),C=Fh(l,"color");M.fill||(M.fill=C),v.setItemVisual(d,{symbol:y,symbolSize:m,symbolRotate:_,symbolOffset:S,symbolKeepAspect:b,style:M})}),f.updateData(v),this.group.add(f.group),v.eachItemGraphicEl(function(d){d.traverse(function(p){Rt(p).dataModel=a})}),this.markKeep(f),f.group.silent=a.get("silent")||t.get("silent")},e.type="markPoint",e})(cw);function Mat(r,e,t){var a;r?a=st(r&&r.dimensions,function(s){var l=e.getData().getDimensionInfo(e.getData().mapDimension(s))||{};return et(et({},l),{name:s,ordinalMeta:null})}):a=[{name:"value",type:"float"}];var n=new Pr(a,t),i=st(t.get("data"),It(Eh,e));r&&(i=le(i,It(Rh,r)));var o=qk(!!r,a);return n.initData(i,null,o),n}function Lat(r){r.registerComponentModel(wat),r.registerComponentView(Cat),r.registerPreprocessor(function(e){lw(e.series,"markPoint")&&(e.markPoint=e.markPoint||{})})}var Eat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.createMarkerModelFromSeries=function(t,a,n){return new e(t,a,n)},e.type="markLine",e.defaultOption={z:5,symbol:["circle","arrow"],symbolSize:[8,16],symbolOffset:0,precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end",distance:5},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"},e})(Ti),_p=Kt(),Rat=function(r,e,t,a){var n=r.getData(),i;if(it(a))i=a;else{var o=a.type;if(o==="min"||o==="max"||o==="average"||o==="median"||a.xAxis!=null||a.yAxis!=null){var s=void 0,l=void 0;if(a.yAxis!=null||a.xAxis!=null)s=e.getAxis(a.yAxis!=null?"y":"x"),l=fr(a.yAxis,a.xAxis);else{var u=Wk(a,n,e,r);s=u.valueAxis;var f=jO(n,u.valueDataDim);l=uw(n,f,o)}var v=s.dim==="x"?0:1,d=1-v,p=Dt(a),y={coord:[]};p.type=null,p.coord=[],p.coord[d]=-1/0,y.coord[d]=1/0;var m=t.get("precision");m>=0&&Qt(l)&&(l=+l.toFixed(Math.min(m,20))),p.coord[v]=y.coord[v]=l,i=[p,y,{type:o,valueIndex:a.valueIndex,value:l}]}else i=[]}var _=[Eh(r,i[0]),Eh(r,i[1]),et({},i[2])];return _[2].type=_[2].type||null,zt(_[2],_[0]),zt(_[2],_[1]),_};function Pg(r){return!isNaN(r)&&!isFinite(r)}function UI(r,e,t,a){var n=1-r,i=a.dimensions[r];return Pg(e[n])&&Pg(t[n])&&e[r]===t[r]&&a.getAxis(i).containData(e[r])}function Iat(r,e){if(r.type==="cartesian2d"){var t=e[0].coord,a=e[1].coord;if(t&&a&&(UI(1,t,a,r)||UI(0,t,a,r)))return!0}return Rh(r,e[0])&&Rh(r,e[1])}function ox(r,e,t,a,n){var i=a.coordinateSystem,o=r.getItemModel(e),s,l=ft(o.get("x"),n.getWidth()),u=ft(o.get("y"),n.getHeight());if(!isNaN(l)&&!isNaN(u))s=[l,u];else{if(a.getMarkerPosition)s=a.getMarkerPosition(r.getValues(r.dimensions,e));else{var f=i.dimensions,v=r.get(f[0],e),d=r.get(f[1],e);s=i.dataToPoint([v,d])}if(cl(i,"cartesian2d")){var p=i.getAxis("x"),y=i.getAxis("y"),f=i.dimensions;Pg(r.get(f[0],e))?s[0]=p.toGlobalCoord(p.getExtent()[t?0:1]):Pg(r.get(f[1],e))&&(s[1]=y.toGlobalCoord(y.getExtent()[t?0:1]))}isNaN(l)||(s[0]=l),isNaN(u)||(s[1]=u)}r.setItemLayout(e,s)}var Nat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.updateTransform=function(t,a,n){a.eachSeries(function(i){var o=Ti.getMarkerModelFromSeries(i,"markLine");if(o){var s=o.getData(),l=_p(o).from,u=_p(o).to;l.each(function(f){ox(l,f,!0,i,n),ox(u,f,!1,i,n)}),s.each(function(f){s.setItemLayout(f,[l.getItemLayout(f),u.getItemLayout(f)])}),this.markerGroupMap.get(i.id).updateLayout()}},this)},e.prototype.renderSeries=function(t,a,n,i){var o=t.coordinateSystem,s=t.id,l=t.getData(),u=this.markerGroupMap,f=u.get(s)||u.set(s,new N2);this.group.add(f.group);var v=Pat(o,t,a),d=v.from,p=v.to,y=v.line;_p(a).from=d,_p(a).to=p,a.setData(y);var m=a.get("symbol"),_=a.get("symbolSize"),S=a.get("symbolRotate"),b=a.get("symbolOffset");it(m)||(m=[m,m]),it(_)||(_=[_,_]),it(S)||(S=[S,S]),it(b)||(b=[b,b]),v.from.each(function(A){w(d,A,!0),w(p,A,!1)}),y.each(function(A){var M=y.getItemModel(A).getModel("lineStyle").getLineStyle();y.setItemLayout(A,[d.getItemLayout(A),p.getItemLayout(A)]),M.stroke==null&&(M.stroke=d.getItemVisual(A,"style").fill),y.setItemVisual(A,{fromSymbolKeepAspect:d.getItemVisual(A,"symbolKeepAspect"),fromSymbolOffset:d.getItemVisual(A,"symbolOffset"),fromSymbolRotate:d.getItemVisual(A,"symbolRotate"),fromSymbolSize:d.getItemVisual(A,"symbolSize"),fromSymbol:d.getItemVisual(A,"symbol"),toSymbolKeepAspect:p.getItemVisual(A,"symbolKeepAspect"),toSymbolOffset:p.getItemVisual(A,"symbolOffset"),toSymbolRotate:p.getItemVisual(A,"symbolRotate"),toSymbolSize:p.getItemVisual(A,"symbolSize"),toSymbol:p.getItemVisual(A,"symbol"),style:M})}),f.updateData(y),v.line.eachItemGraphicEl(function(A){Rt(A).dataModel=a,A.traverse(function(M){Rt(M).dataModel=a})});function w(A,M,C){var L=A.getItemModel(M);ox(A,M,C,t,i);var E=L.getModel("itemStyle").getItemStyle();E.fill==null&&(E.fill=Fh(l,"color")),A.setItemVisual(M,{symbolKeepAspect:L.get("symbolKeepAspect"),symbolOffset:Ot(L.get("symbolOffset",!0),b[C?0:1]),symbolRotate:Ot(L.get("symbolRotate",!0),S[C?0:1]),symbolSize:Ot(L.get("symbolSize"),_[C?0:1]),symbol:Ot(L.get("symbol",!0),m[C?0:1]),style:E})}this.markKeep(f),f.group.silent=a.get("silent")||t.get("silent")},e.type="markLine",e})(cw);function Pat(r,e,t){var a;r?a=st(r&&r.dimensions,function(u){var f=e.getData().getDimensionInfo(e.getData().mapDimension(u))||{};return et(et({},f),{name:u,ordinalMeta:null})}):a=[{name:"value",type:"float"}];var n=new Pr(a,t),i=new Pr(a,t),o=new Pr([],t),s=st(t.get("data"),It(Rat,e,r,t));r&&(s=le(s,It(Iat,r)));var l=qk(!!r,a);return n.initData(st(s,function(u){return u[0]}),null,l),i.initData(st(s,function(u){return u[1]}),null,l),o.initData(st(s,function(u){return u[2]})),o.hasItemOption=!0,{from:n,to:i,line:o}}function Oat(r){r.registerComponentModel(Eat),r.registerComponentView(Nat),r.registerPreprocessor(function(e){lw(e.series,"markLine")&&(e.markLine=e.markLine||{})})}var zat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.createMarkerModelFromSeries=function(t,a,n){return new e(t,a,n)},e.type="markArea",e.defaultOption={z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}},e})(Ti),xp=Kt(),kat=function(r,e,t,a){var n=a[0],i=a[1];if(!(!n||!i)){var o=Eh(r,n),s=Eh(r,i),l=o.coord,u=s.coord;l[0]=fr(l[0],-1/0),l[1]=fr(l[1],-1/0),u[0]=fr(u[0],1/0),u[1]=fr(u[1],1/0);var f=db([{},o,s]);return f.coord=[o.coord,s.coord],f.x0=o.x,f.y0=o.y,f.x1=s.x,f.y1=s.y,f}};function Og(r){return!isNaN(r)&&!isFinite(r)}function FI(r,e,t,a){var n=1-r;return Og(e[n])&&Og(t[n])}function Bat(r,e){var t=e.coord[0],a=e.coord[1],n={coord:t,x:e.x0,y:e.y0},i={coord:a,x:e.x1,y:e.y1};return cl(r,"cartesian2d")?t&&a&&(FI(1,t,a)||FI(0,t,a))?!0:Dat(r,n,i):Rh(r,n)||Rh(r,i)}function jI(r,e,t,a,n){var i=a.coordinateSystem,o=r.getItemModel(e),s,l=ft(o.get(t[0]),n.getWidth()),u=ft(o.get(t[1]),n.getHeight());if(!isNaN(l)&&!isNaN(u))s=[l,u];else{if(a.getMarkerPosition){var f=r.getValues(["x0","y0"],e),v=r.getValues(["x1","y1"],e),d=i.clampData(f),p=i.clampData(v),y=[];t[0]==="x0"?y[0]=d[0]>p[0]?v[0]:f[0]:y[0]=d[0]>p[0]?f[0]:v[0],t[1]==="y0"?y[1]=d[1]>p[1]?v[1]:f[1]:y[1]=d[1]>p[1]?f[1]:v[1],s=a.getMarkerPosition(y,t,!0)}else{var m=r.get(t[0],e),_=r.get(t[1],e),S=[m,_];i.clampData&&i.clampData(S,S),s=i.dataToPoint(S,!0)}if(cl(i,"cartesian2d")){var b=i.getAxis("x"),w=i.getAxis("y"),m=r.get(t[0],e),_=r.get(t[1],e);Og(m)?s[0]=b.toGlobalCoord(b.getExtent()[t[0]==="x0"?0:1]):Og(_)&&(s[1]=w.toGlobalCoord(w.getExtent()[t[1]==="y0"?0:1]))}isNaN(l)||(s[0]=l),isNaN(u)||(s[1]=u)}return s}var YI=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]],Vat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.updateTransform=function(t,a,n){a.eachSeries(function(i){var o=Ti.getMarkerModelFromSeries(i,"markArea");if(o){var s=o.getData();s.each(function(l){var u=st(YI,function(v){return jI(s,l,v,i,n)});s.setItemLayout(l,u);var f=s.getItemGraphicEl(l);f.setShape("points",u)})}},this)},e.prototype.renderSeries=function(t,a,n,i){var o=t.coordinateSystem,s=t.id,l=t.getData(),u=this.markerGroupMap,f=u.get(s)||u.set(s,{group:new Ct});this.group.add(f.group),this.markKeep(f);var v=Gat(o,t,a);a.setData(v),v.each(function(d){var p=st(YI,function(E){return jI(v,d,E,t,i)}),y=o.getAxis("x").scale,m=o.getAxis("y").scale,_=y.getExtent(),S=m.getExtent(),b=[y.parse(v.get("x0",d)),y.parse(v.get("x1",d))],w=[m.parse(v.get("y0",d)),m.parse(v.get("y1",d))];Ga(b),Ga(w);var A=!(_[0]>b[1]||_[1]w[1]||S[1]=0},e.prototype.getOrient=function(){return this.get("orient")==="vertical"?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},e.type="legend.plain",e.dependencies=["series"],e.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:"#ccc",inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}},e})(jt),du=It,rb=P,Sp=Ct,$k=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.newlineDisabled=!1,t}return e.prototype.init=function(){this.group.add(this._contentGroup=new Sp),this.group.add(this._selectorGroup=new Sp),this._isFirstRender=!0},e.prototype.getContentGroup=function(){return this._contentGroup},e.prototype.getSelectorGroup=function(){return this._selectorGroup},e.prototype.render=function(t,a,n){var i=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),!!t.get("show",!0)){var o=t.get("align"),s=t.get("orient");(!o||o==="auto")&&(o=t.get("left")==="right"&&s==="vertical"?"right":"left");var l=t.get("selector",!0),u=t.get("selectorPosition",!0);l&&(!u||u==="auto")&&(u=s==="horizontal"?"end":"start"),this.renderInner(o,t,a,n,l,s,u);var f=t.getBoxLayoutParams(),v={width:n.getWidth(),height:n.getHeight()},d=t.get("padding"),p=Qe(f,v,d),y=this.layoutInner(t,o,p,i,l,u),m=Qe(wt({width:y.width,height:y.height},f),v,d);this.group.x=m.x-y.x,this.group.y=m.y-y.y,this.group.markRedraw(),this.group.add(this._backgroundEl=Bk(y,t))}},e.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},e.prototype.renderInner=function(t,a,n,i,o,s,l){var u=this.getContentGroup(),f=xt(),v=a.get("selectedMode"),d=[];n.eachRawSeries(function(p){!p.get("legendHoverLink")&&d.push(p.id)}),rb(a.getData(),function(p,y){var m=p.get("name");if(!this.newlineDisabled&&(m===""||m===` +`)){var _=new Sp;_.newline=!0,u.add(_);return}var S=n.getSeriesByName(m)[0];if(!f.get(m))if(S){var b=S.getData(),w=b.getVisual("legendLineStyle")||{},A=b.getVisual("legendIcon"),M=b.getVisual("style"),C=this._createItem(S,m,y,p,a,t,w,M,A,v,i);C.on("click",du(XI,m,null,i,d)).on("mouseover",du(ab,S.name,null,i,d)).on("mouseout",du(nb,S.name,null,i,d)),f.set(m,!0)}else n.eachRawSeries(function(L){if(!f.get(m)&&L.legendVisualProvider){var E=L.legendVisualProvider;if(!E.containName(m))return;var R=E.indexOfName(m),N=E.getItemVisual(R,"style"),O=E.getItemVisual(R,"legendIcon"),k=ha(N.fill);k&&k[3]===0&&(k[3]=.2,N=et(et({},N),{fill:di(k,"rgba")}));var G=this._createItem(L,m,y,p,a,t,{},N,O,v,i);G.on("click",du(XI,null,m,i,d)).on("mouseover",du(ab,null,m,i,d)).on("mouseout",du(nb,null,m,i,d)),f.set(m,!0)}},this)},this),o&&this._createSelector(o,a,i,s,l)},e.prototype._createSelector=function(t,a,n,i,o){var s=this.getSelectorGroup();rb(t,function(u){var f=u.type,v=new $t({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){n.dispatchAction({type:f==="all"?"legendAllSelect":"legendInverseSelect"})}});s.add(v);var d=a.getModel("selectorLabel"),p=a.getModel(["emphasis","selectorLabel"]);Sr(v,{normal:d,emphasis:p},{defaultText:u.title}),Zs(v)})},e.prototype._createItem=function(t,a,n,i,o,s,l,u,f,v,d){var p=t.visualDrawType,y=o.get("itemWidth"),m=o.get("itemHeight"),_=o.isSelected(a),S=i.get("symbolRotate"),b=i.get("symbolKeepAspect"),w=i.get("icon");f=w||f||"roundRect";var A=Fat(f,i,l,u,p,_,d),M=new Sp,C=i.getModel("textStyle");if(bt(t.getLegendIcon)&&(!w||w==="inherit"))M.add(t.getLegendIcon({itemWidth:y,itemHeight:m,icon:f,iconRotate:S,itemStyle:A.itemStyle,lineStyle:A.lineStyle,symbolKeepAspect:b}));else{var L=w==="inherit"&&t.getData().getVisual("symbol")?S==="inherit"?t.getData().getVisual("symbolRotate"):S:0;M.add(jat({itemWidth:y,itemHeight:m,icon:f,iconRotate:L,itemStyle:A.itemStyle,symbolKeepAspect:b}))}var E=s==="left"?y+5:-5,R=s,N=o.get("formatter"),O=a;vt(N)&&N?O=N.replace("{name}",a??""):bt(N)&&(O=N(a));var k=_?C.getTextColor():i.get("inactiveColor");M.add(new $t({style:xe(C,{text:O,x:E,y:m/2,fill:k,align:R,verticalAlign:"middle"},{inheritColor:k})}));var G=new Wt({shape:M.getBoundingRect(),invisible:!0}),H=i.getModel("tooltip");return H.get("show")&&Wu({el:G,componentModel:o,itemName:a,itemTooltipOption:H.option}),M.add(G),M.eachChild(function(F){F.silent=!0}),G.silent=!v,this.getContentGroup().add(M),Zs(M),M.__legendDataIndex=n,M},e.prototype.layoutInner=function(t,a,n,i,o,s){var l=this.getContentGroup(),u=this.getSelectorGroup();qs(t.get("orient"),l,t.get("itemGap"),n.width,n.height);var f=l.getBoundingRect(),v=[-f.x,-f.y];if(u.markRedraw(),l.markRedraw(),o){qs("horizontal",u,t.get("selectorItemGap",!0));var d=u.getBoundingRect(),p=[-d.x,-d.y],y=t.get("selectorButtonGap",!0),m=t.getOrient().index,_=m===0?"width":"height",S=m===0?"height":"width",b=m===0?"y":"x";s==="end"?p[m]+=f[_]+y:v[m]+=d[_]+y,p[1-m]+=f[S]/2-d[S]/2,u.x=p[0],u.y=p[1],l.x=v[0],l.y=v[1];var w={x:0,y:0};return w[_]=f[_]+y+d[_],w[S]=Math.max(f[S],d[S]),w[b]=Math.min(0,d[b]+p[1-m]),w}else return l.x=v[0],l.y=v[1],this.group.getBoundingRect()},e.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},e.type="legend.plain",e})(Ee);function Fat(r,e,t,a,n,i,o){function s(_,S){_.lineWidth==="auto"&&(_.lineWidth=S.lineWidth>0?2:0),rb(_,function(b,w){_[w]==="inherit"&&(_[w]=S[w])})}var l=e.getModel("itemStyle"),u=l.getItemStyle(),f=r.lastIndexOf("empty",0)===0?"fill":"stroke",v=l.getShallow("decal");u.decal=!v||v==="inherit"?a.decal:Ou(v,o),u.fill==="inherit"&&(u.fill=a[n]),u.stroke==="inherit"&&(u.stroke=a[f]),u.opacity==="inherit"&&(u.opacity=(n==="fill"?a:t).opacity),s(u,a);var d=e.getModel("lineStyle"),p=d.getLineStyle();if(s(p,t),u.fill==="auto"&&(u.fill=a.fill),u.stroke==="auto"&&(u.stroke=a.fill),p.stroke==="auto"&&(p.stroke=a.fill),!i){var y=e.get("inactiveBorderWidth"),m=u[f];u.lineWidth=y==="auto"?a.lineWidth>0&&m?2:0:u.lineWidth,u.fill=e.get("inactiveColor"),u.stroke=e.get("inactiveBorderColor"),p.stroke=d.get("inactiveColor"),p.lineWidth=d.get("inactiveWidth")}return{itemStyle:u,lineStyle:p}}function jat(r){var e=r.icon||"roundRect",t=Ye(e,0,0,r.itemWidth,r.itemHeight,r.itemStyle.fill,r.symbolKeepAspect);return t.setStyle(r.itemStyle),t.rotation=(r.iconRotate||0)*Math.PI/180,t.setOrigin([r.itemWidth/2,r.itemHeight/2]),e.indexOf("empty")>-1&&(t.style.stroke=t.style.fill,t.style.fill="#fff",t.style.lineWidth=2),t}function XI(r,e,t,a){nb(r,e,t,a),t.dispatchAction({type:"legendToggleSelect",name:r??e}),ab(r,e,t,a)}function Kk(r){for(var e=r.getZr().storage.getDisplayList(),t,a=0,n=e.length;an[o],_=[-p.x,-p.y];a||(_[i]=f[u]);var S=[0,0],b=[-y.x,-y.y],w=Ot(t.get("pageButtonGap",!0),t.get("itemGap",!0));if(m){var A=t.get("pageButtonPosition",!0);A==="end"?b[i]+=n[o]-y[o]:S[i]+=y[o]+w}b[1-i]+=p[s]/2-y[s]/2,f.setPosition(_),v.setPosition(S),d.setPosition(b);var M={x:0,y:0};if(M[o]=m?n[o]:p[o],M[s]=Math.max(p[s],y[s]),M[l]=Math.min(0,y[l]+b[1-i]),v.__rectSize=n[o],m){var C={x:0,y:0};C[o]=Math.max(n[o]-y[o]-w,0),C[s]=M[s],v.setClipPath(new Wt({shape:C})),v.__rectSize=C[o]}else d.eachChild(function(E){E.attr({invisible:!0,silent:!0})});var L=this._getPageInfo(t);return L.pageIndex!=null&&Jt(f,{x:L.contentPosition[0],y:L.contentPosition[1]},m?t:null),this._updatePageInfoView(t,L),M},e.prototype._pageGo=function(t,a,n){var i=this._getPageInfo(a)[t];i!=null&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:a.id})},e.prototype._updatePageInfoView=function(t,a){var n=this._controllerGroup;P(["pagePrev","pageNext"],function(f){var v=f+"DataIndex",d=a[v]!=null,p=n.childOfName(f);p&&(p.setStyle("fill",d?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),p.cursor=d?"pointer":"default")});var i=n.childOfName("pageText"),o=t.get("pageFormatter"),s=a.pageIndex,l=s!=null?s+1:0,u=a.pageCount;i&&o&&i.setStyle("text",vt(o)?o.replace("{current}",l==null?"":l+"").replace("{total}",u==null?"":u+""):o({current:l,total:u}))},e.prototype._getPageInfo=function(t){var a=t.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,o=t.getOrient().index,s=sx[o],l=lx[o],u=this._findTargetItemIndex(a),f=n.children(),v=f[u],d=f.length,p=d?1:0,y={contentPosition:[n.x,n.y],pageCount:p,pageIndex:p-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!v)return y;var m=A(v);y.contentPosition[o]=-m.s;for(var _=u+1,S=m,b=m,w=null;_<=d;++_)w=A(f[_]),(!w&&b.e>S.s+i||w&&!M(w,S.s))&&(b.i>S.i?S=b:S=w,S&&(y.pageNextDataIndex==null&&(y.pageNextDataIndex=S.i),++y.pageCount)),b=w;for(var _=u-1,S=m,b=m,w=null;_>=-1;--_)w=A(f[_]),(!w||!M(b,w.s))&&S.i=L&&C.s<=L+i}},e.prototype._findTargetItemIndex=function(t){if(!this._showController)return 0;var a,n=this.getContentGroup(),i;return n.eachChild(function(o,s){var l=o.__legendDataIndex;i==null&&l!=null&&(i=s),l===t&&(a=s)}),a??i},e.type="legend.scroll",e})($k);function qat(r){r.registerAction("legendScroll","legendscroll",function(e,t){var a=e.scrollDataIndex;a!=null&&t.eachComponent({mainType:"legend",subType:"scroll",query:e},function(n){n.setScrollDataIndex(a)})})}function $at(r){Ht(Qk),r.registerComponentModel(Zat),r.registerComponentView(Wat),qat(r)}function Kat(r){Ht(Qk),Ht($at)}var Qat=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.type="dataZoom.inside",e.defaultOption=zo(Lh.defaultOption,{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),e})(Lh),fw=Kt();function Jat(r,e,t){fw(r).coordSysRecordMap.each(function(a){var n=a.dataZoomInfoMap.get(e.uid);n&&(n.getRange=t)})}function tnt(r,e){for(var t=fw(r).coordSysRecordMap,a=t.keys(),n=0;na[t+e]&&(e=s),n=n&&o.get("preventDefaultMouseMove",!0)}),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!n}}}function int(r){r.registerProcessor(r.PRIORITY.PROCESSOR.FILTER,function(e,t){var a=fw(t),n=a.coordSysRecordMap||(a.coordSysRecordMap=xt());n.each(function(i){i.dataZoomInfoMap=null}),e.eachComponent({mainType:"dataZoom",subType:"inside"},function(i){var o=Ok(i);P(o.infoList,function(s){var l=s.model.uid,u=n.get(l)||n.set(l,ent(t,s.model)),f=u.dataZoomInfoMap||(u.dataZoomInfoMap=xt());f.set(i.uid,{dzReferCoordSysInfo:s,model:i,getRange:null})})}),n.each(function(i){var o=i.controller,s,l=i.dataZoomInfoMap;if(l){var u=l.keys()[0];u!=null&&(s=l.get(u))}if(!s){Jk(n,i);return}var f=nnt(l);o.enable(f.controlType,f.opt),o.setPointerChecker(i.containsPoint),ec(i,"dispatchAction",s.model.get("throttle",!0),"fixRate")})})}var ont=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="dataZoom.inside",t}return e.prototype.render=function(t,a,n){if(r.prototype.render.apply(this,arguments),t.noTarget()){this._clear();return}this.range=t.getPercentRange(),Jat(n,t,{pan:dt(ux.pan,this),zoom:dt(ux.zoom,this),scrollMove:dt(ux.scrollMove,this)})},e.prototype.dispose=function(){this._clear(),r.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){tnt(this.api,this.dataZoomModel),this.range=null},e.type="dataZoom.inside",e})(rw),ux={zoom:function(r,e,t,a){var n=this.range,i=n.slice(),o=r.axisModels[0];if(o){var s=cx[e](null,[a.originX,a.originY],o,t,r),l=(s.signal>0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(i[1]-i[0])+i[0],u=Math.max(1/a.scale,0);i[0]=(i[0]-l)*u+l,i[1]=(i[1]-l)*u+l;var f=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();if(hl(0,i,[0,100],0,f.minSpan,f.maxSpan),this.range=i,n[0]!==i[0]||n[1]!==i[1])return i}},pan:qI(function(r,e,t,a,n,i){var o=cx[a]([i.oldX,i.oldY],[i.newX,i.newY],e,n,t);return o.signal*(r[1]-r[0])*o.pixel/o.pixelLength}),scrollMove:qI(function(r,e,t,a,n,i){var o=cx[a]([0,0],[i.scrollDelta,i.scrollDelta],e,n,t);return o.signal*(r[1]-r[0])*i.scrollDelta})};function qI(r){return function(e,t,a,n){var i=this.range,o=i.slice(),s=e.axisModels[0];if(s){var l=r(o,s,e,t,a,n);if(hl(l,o,[0,100],"all"),this.range=o,i[0]!==o[0]||i[1]!==o[1])return o}}}var cx={grid:function(r,e,t,a,n){var i=t.axis,o={},s=n.model.coordinateSystem.getRect();return r=r||[0,0],i.dim==="x"?(o.pixel=e[0]-r[0],o.pixelLength=s.width,o.pixelStart=s.x,o.signal=i.inverse?1:-1):(o.pixel=e[1]-r[1],o.pixelLength=s.height,o.pixelStart=s.y,o.signal=i.inverse?-1:1),o},polar:function(r,e,t,a,n){var i=t.axis,o={},s=n.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return r=r?s.pointToCoord(r):[0,0],e=s.pointToCoord(e),t.mainType==="radiusAxis"?(o.pixel=e[0]-r[0],o.pixelLength=l[1]-l[0],o.pixelStart=l[0],o.signal=i.inverse?1:-1):(o.pixel=e[1]-r[1],o.pixelLength=u[1]-u[0],o.pixelStart=u[0],o.signal=i.inverse?-1:1),o},singleAxis:function(r,e,t,a,n){var i=t.axis,o=n.model.coordinateSystem.getRect(),s={};return r=r||[0,0],i.orient==="horizontal"?(s.pixel=e[0]-r[0],s.pixelLength=o.width,s.pixelStart=o.x,s.signal=i.inverse?1:-1):(s.pixel=e[1]-r[1],s.pixelLength=o.height,s.pixelStart=o.y,s.signal=i.inverse?-1:1),s}};function tB(r){aw(r),r.registerComponentModel(Qat),r.registerComponentView(ont),int(r)}var snt=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.type="dataZoom.slider",e.layoutMode="box",e.defaultOption=zo(Lh.defaultOption,{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,borderColor:"#d2dbee",borderRadius:3,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#d2dbee",width:.5},areaStyle:{color:"#d2dbee",opacity:.2}},selectedDataBackground:{lineStyle:{color:"#8fb0f7",width:.5},areaStyle:{color:"#8fb0f7",opacity:.2}},fillerColor:"rgba(135,175,274,0.2)",handleIcon:"path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z",handleSize:"100%",handleStyle:{color:"#fff",borderColor:"#ACB8D1"},moveHandleSize:7,moveHandleIcon:"path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z",moveHandleStyle:{color:"#D2DBEE",opacity:.7},showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#6E7079"},brushSelect:!0,brushStyle:{color:"rgba(135,175,274,0.15)"},emphasis:{handleStyle:{borderColor:"#8FB0F7"},moveHandleStyle:{color:"#8FB0F7"}}}),e})(Lh),Cf=Wt,$I=7,lnt=1,fx=30,unt=7,Mf="horizontal",KI="vertical",cnt=5,fnt=["line","bar","candlestick","scatter"],hnt={easing:"cubicOut",duration:100,delay:0},vnt=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t._displayables={},t}return e.prototype.init=function(t,a){this.api=a,this._onBrush=dt(this._onBrush,this),this._onBrushEnd=dt(this._onBrushEnd,this)},e.prototype.render=function(t,a,n,i){if(r.prototype.render.apply(this,arguments),ec(this,"_dispatchZoomAction",t.get("throttle"),"fixRate"),this._orient=t.getOrient(),t.get("show")===!1){this.group.removeAll();return}if(t.noTarget()){this._clear(),this.group.removeAll();return}(!i||i.type!=="dataZoom"||i.from!==this.uid)&&this._buildView(),this._updateView()},e.prototype.dispose=function(){this._clear(),r.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){gh(this,"_dispatchZoomAction");var t=this.api.getZr();t.off("mousemove",this._onBrush),t.off("mouseup",this._onBrushEnd)},e.prototype._buildView=function(){var t=this.group;t.removeAll(),this._brushing=!1,this._displayables.brushRect=null,this._resetLocation(),this._resetInterval();var a=this._displayables.sliderGroup=new Ct;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(a),this._positionGroup()},e.prototype._resetLocation=function(){var t=this.dataZoomModel,a=this.api,n=t.get("brushSelect"),i=n?unt:0,o=this._findCoordRect(),s={width:a.getWidth(),height:a.getHeight()},l=this._orient===Mf?{right:s.width-o.x-o.width,top:s.height-fx-$I-i,width:o.width,height:fx}:{right:$I,top:o.y,width:fx,height:o.height},u=Qu(t.option);P(["right","top","width","height"],function(v){u[v]==="ph"&&(u[v]=l[v])});var f=Qe(u,s);this._location={x:f.x,y:f.y},this._size=[f.width,f.height],this._orient===KI&&this._size.reverse()},e.prototype._positionGroup=function(){var t=this.group,a=this._location,n=this._orient,i=this.dataZoomModel.getFirstTargetAxisModel(),o=i&&i.get("inverse"),s=this._displayables.sliderGroup,l=(this._dataShadowInfo||{}).otherAxisInverse;s.attr(n===Mf&&!o?{scaleY:l?1:-1,scaleX:1}:n===Mf&&o?{scaleY:l?1:-1,scaleX:-1}:n===KI&&!o?{scaleY:l?-1:1,scaleX:1,rotation:Math.PI/2}:{scaleY:l?-1:1,scaleX:-1,rotation:Math.PI/2});var u=t.getBoundingRect([s]);t.x=a.x-u.x,t.y=a.y-u.y,t.markRedraw()},e.prototype._getViewExtent=function(){return[0,this._size[0]]},e.prototype._renderBackground=function(){var t=this.dataZoomModel,a=this._size,n=this._displayables.sliderGroup,i=t.get("brushSelect");n.add(new Cf({silent:!0,shape:{x:0,y:0,width:a[0],height:a[1]},style:{fill:t.get("backgroundColor")},z2:-40}));var o=new Cf({shape:{x:0,y:0,width:a[0],height:a[1]},style:{fill:"transparent"},z2:0,onclick:dt(this._onClickPanel,this)}),s=this.api.getZr();i?(o.on("mousedown",this._onBrushStart,this),o.cursor="crosshair",s.on("mousemove",this._onBrush),s.on("mouseup",this._onBrushEnd)):(s.off("mousemove",this._onBrush),s.off("mouseup",this._onBrushEnd)),n.add(o)},e.prototype._renderDataShadow=function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(this._displayables.dataShadowSegs=[],!t)return;var a=this._size,n=this._shadowSize||[],i=t.series,o=i.getRawData(),s=i.getShadowDim&&i.getShadowDim(),l=s&&o.getDimensionInfo(s)?i.getShadowDim():t.otherDim;if(l==null)return;var u=this._shadowPolygonPts,f=this._shadowPolylinePts;if(o!==this._shadowData||l!==this._shadowDim||a[0]!==n[0]||a[1]!==n[1]){var v=o.getDataExtent(l),d=(v[1]-v[0])*.3;v=[v[0]-d,v[1]+d];var p=[0,a[1]],y=[0,a[0]],m=[[a[0],0],[0,0]],_=[],S=y[1]/(o.count()-1),b=0,w=Math.round(o.count()/a[0]),A;o.each([l],function(R,N){if(w>0&&N%w){b+=S;return}var O=R==null||isNaN(R)||R==="",k=O?0:se(R,v,p,!0);O&&!A&&N?(m.push([m[m.length-1][0],0]),_.push([_[_.length-1][0],0])):!O&&A&&(m.push([b,0]),_.push([b,0])),m.push([b,k]),_.push([b,k]),b+=S,A=O}),u=this._shadowPolygonPts=m,f=this._shadowPolylinePts=_}this._shadowData=o,this._shadowDim=l,this._shadowSize=[a[0],a[1]];var M=this.dataZoomModel;function C(R){var N=M.getModel(R?"selectedDataBackground":"dataBackground"),O=new Ct,k=new Vr({shape:{points:u},segmentIgnoreThreshold:1,style:N.getModel("areaStyle").getAreaStyle(),silent:!0,z2:-20}),G=new Gr({shape:{points:f},segmentIgnoreThreshold:1,style:N.getModel("lineStyle").getLineStyle(),silent:!0,z2:-19});return O.add(k),O.add(G),O}for(var L=0;L<3;L++){var E=C(L===1);this._displayables.sliderGroup.add(E),this._displayables.dataShadowSegs.push(E)}},e.prototype._prepareDataShadowInfo=function(){var t=this.dataZoomModel,a=t.get("showDataShadow");if(a!==!1){var n,i=this.ecModel;return t.eachTargetAxis(function(o,s){var l=t.getAxisProxy(o,s).getTargetSeriesModels();P(l,function(u){if(!n&&!(a!==!0&&Vt(fnt,u.get("type"))<0)){var f=i.getComponent(So(o),s).axis,v=dnt(o),d,p=u.coordinateSystem;v!=null&&p.getOtherAxis&&(d=p.getOtherAxis(f).inverse),v=u.getData().mapDimension(v),n={thisAxis:f,series:u,thisDim:o,otherDim:v,otherAxisInverse:d}}},this)},this),n}},e.prototype._renderHandle=function(){var t=this.group,a=this._displayables,n=a.handles=[null,null],i=a.handleLabels=[null,null],o=this._displayables.sliderGroup,s=this._size,l=this.dataZoomModel,u=this.api,f=l.get("borderRadius")||0,v=l.get("brushSelect"),d=a.filler=new Cf({silent:v,style:{fill:l.get("fillerColor")},textConfig:{position:"inside"}});o.add(d),o.add(new Cf({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:s[0],height:s[1],r:f},style:{stroke:l.get("dataBackgroundColor")||l.get("borderColor"),lineWidth:lnt,fill:"rgba(0,0,0,0)"}})),P([0,1],function(w){var A=l.get("handleIcon");!hg[A]&&A.indexOf("path://")<0&&A.indexOf("image://")<0&&(A="path://"+A);var M=Ye(A,-1,0,2,2,null,!0);M.attr({cursor:QI(this._orient),draggable:!0,drift:dt(this._onDragMove,this,w),ondragend:dt(this._onDragEnd,this),onmouseover:dt(this._showDataInfo,this,!0),onmouseout:dt(this._showDataInfo,this,!1),z2:5});var C=M.getBoundingRect(),L=l.get("handleSize");this._handleHeight=ft(L,this._size[1]),this._handleWidth=C.width/C.height*this._handleHeight,M.setStyle(l.getModel("handleStyle").getItemStyle()),M.style.strokeNoScale=!0,M.rectHover=!0,M.ensureState("emphasis").style=l.getModel(["emphasis","handleStyle"]).getItemStyle(),Zs(M);var E=l.get("handleColor");E!=null&&(M.style.fill=E),o.add(n[w]=M);var R=l.getModel("textStyle");t.add(i[w]=new $t({silent:!0,invisible:!0,style:xe(R,{x:0,y:0,text:"",verticalAlign:"middle",align:"center",fill:R.getTextColor(),font:R.getFont()}),z2:10}))},this);var p=d;if(v){var y=ft(l.get("moveHandleSize"),s[1]),m=a.moveHandle=new Wt({style:l.getModel("moveHandleStyle").getItemStyle(),silent:!0,shape:{r:[0,0,2,2],y:s[1]-.5,height:y}}),_=y*.8,S=a.moveHandleIcon=Ye(l.get("moveHandleIcon"),-_/2,-_/2,_,_,"#fff",!0);S.silent=!0,S.y=s[1]+y/2-.5,m.ensureState("emphasis").style=l.getModel(["emphasis","moveHandleStyle"]).getItemStyle();var b=Math.min(s[1]/2,Math.max(y,10));p=a.moveZone=new Wt({invisible:!0,shape:{y:s[1]-b,height:y+b}}),p.on("mouseover",function(){u.enterEmphasis(m)}).on("mouseout",function(){u.leaveEmphasis(m)}),o.add(m),o.add(S),o.add(p)}p.attr({draggable:!0,cursor:QI(this._orient),drift:dt(this._onDragMove,this,"all"),ondragstart:dt(this._showDataInfo,this,!0),ondragend:dt(this._onDragEnd,this),onmouseover:dt(this._showDataInfo,this,!0),onmouseout:dt(this._showDataInfo,this,!1)})},e.prototype._resetInterval=function(){var t=this._range=this.dataZoomModel.getPercentRange(),a=this._getViewExtent();this._handleEnds=[se(t[0],[0,100],a,!0),se(t[1],[0,100],a,!0)]},e.prototype._updateInterval=function(t,a){var n=this.dataZoomModel,i=this._handleEnds,o=this._getViewExtent(),s=n.findRepresentativeAxisProxy().getMinMaxSpan(),l=[0,100];hl(a,i,o,n.get("zoomLock")?"all":t,s.minSpan!=null?se(s.minSpan,l,o,!0):null,s.maxSpan!=null?se(s.maxSpan,l,o,!0):null);var u=this._range,f=this._range=Ga([se(i[0],o,l,!0),se(i[1],o,l,!0)]);return!u||u[0]!==f[0]||u[1]!==f[1]},e.prototype._updateView=function(t){var a=this._displayables,n=this._handleEnds,i=Ga(n.slice()),o=this._size;P([0,1],function(p){var y=a.handles[p],m=this._handleHeight;y.attr({scaleX:m/2,scaleY:m/2,x:n[p]+(p?-1:1),y:o[1]/2-m/2})},this),a.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:o[1]});var s={x:i[0],width:i[1]-i[0]};a.moveHandle&&(a.moveHandle.setShape(s),a.moveZone.setShape(s),a.moveZone.getBoundingRect(),a.moveHandleIcon&&a.moveHandleIcon.attr("x",s.x+s.width/2));for(var l=a.dataShadowSegs,u=[0,i[0],i[1],o[0]],f=0;fa[0]||n[1]<0||n[1]>a[1])){var i=this._handleEnds,o=(i[0]+i[1])/2,s=this._updateInterval("all",n[0]-o);this._updateView(),s&&this._dispatchZoomAction(!1)}},e.prototype._onBrushStart=function(t){var a=t.offsetX,n=t.offsetY;this._brushStart=new Pt(a,n),this._brushing=!0,this._brushStartTime=+new Date},e.prototype._onBrushEnd=function(t){if(this._brushing){var a=this._displayables.brushRect;if(this._brushing=!1,!!a){a.attr("ignore",!0);var n=a.shape,i=+new Date;if(!(i-this._brushStartTime<200&&Math.abs(n.width)<5)){var o=this._getViewExtent(),s=[0,100];this._range=Ga([se(n.x,o,s,!0),se(n.x+n.width,o,s,!0)]),this._handleEnds=[n.x,n.x+n.width],this._updateView(),this._dispatchZoomAction(!1)}}}},e.prototype._onBrush=function(t){this._brushing&&(yi(t.event),this._updateBrushRect(t.offsetX,t.offsetY))},e.prototype._updateBrushRect=function(t,a){var n=this._displayables,i=this.dataZoomModel,o=n.brushRect;o||(o=n.brushRect=new Cf({silent:!0,style:i.getModel("brushStyle").getItemStyle()}),n.sliderGroup.add(o)),o.attr("ignore",!1);var s=this._brushStart,l=this._displayables.sliderGroup,u=l.transformCoordToLocal(t,a),f=l.transformCoordToLocal(s.x,s.y),v=this._size;u[0]=Math.max(Math.min(v[0],u[0]),0),o.setShape({x:f[0],y:0,width:u[0]-f[0],height:v[1]})},e.prototype._dispatchZoomAction=function(t){var a=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,animation:t?hnt:null,start:a[0],end:a[1]})},e.prototype._findCoordRect=function(){var t,a=Ok(this.dataZoomModel).infoList;if(!t&&a.length){var n=a[0].model.coordinateSystem;t=n.getRect&&n.getRect()}if(!t){var i=this.api.getWidth(),o=this.api.getHeight();t={x:i*.2,y:o*.2,width:i*.6,height:o*.6}}return t},e.type="dataZoom.slider",e})(rw);function dnt(r){var e={x:"y",y:"x",radius:"angle",angle:"radius"};return e[r]}function QI(r){return r==="vertical"?"ns-resize":"ew-resize"}function eB(r){r.registerComponentModel(snt),r.registerComponentView(vnt),aw(r)}function pnt(r){Ht(tB),Ht(eB)}var rB={get:function(r,e,t){var a=Dt((gnt[r]||{})[e]);return t&&it(a)?a[a.length-1]:a}},gnt={color:{active:["#006edd","#e0ffff"],inactive:["rgba(0,0,0,0)"]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}},JI=ar.mapVisual,ynt=ar.eachVisual,mnt=it,tN=P,_nt=Ga,xnt=se,zg=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t.stateList=["inRange","outOfRange"],t.replacableOptionKeys=["inRange","outOfRange","target","controller","color"],t.layoutMode={type:"box",ignoreSize:!0},t.dataBound=[-1/0,1/0],t.targetVisuals={},t.controllerVisuals={},t}return e.prototype.init=function(t,a,n){this.mergeDefaultAndTheme(t,n)},e.prototype.optionUpdated=function(t,a){var n=this.option;!a&&Yk(n,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},e.prototype.resetVisual=function(t){var a=this.stateList;t=dt(t,this),this.controllerVisuals=QS(this.option.controller,a,t),this.targetVisuals=QS(this.option.target,a,t)},e.prototype.getItemSymbol=function(){return null},e.prototype.getTargetSeriesIndices=function(){var t=this.option.seriesIndex,a=[];return t==null||t==="all"?this.ecModel.eachSeries(function(n,i){a.push(i)}):a=he(t),a},e.prototype.eachTargetSeries=function(t,a){P(this.getTargetSeriesIndices(),function(n){var i=this.ecModel.getSeriesByIndex(n);i&&t.call(a,i)},this)},e.prototype.isTargetSeries=function(t){var a=!1;return this.eachTargetSeries(function(n){n===t&&(a=!0)}),a},e.prototype.formatValueText=function(t,a,n){var i=this.option,o=i.precision,s=this.dataBound,l=i.formatter,u;n=n||["<",">"],it(t)&&(t=t.slice(),u=!0);var f=a?t:u?[v(t[0]),v(t[1])]:v(t);if(vt(l))return l.replace("{value}",u?f[0]:f).replace("{value2}",u?f[1]:f);if(bt(l))return u?l(t[0],t[1]):l(t);if(u)return t[0]===s[0]?n[0]+" "+f[1]:t[1]===s[1]?n[1]+" "+f[0]:f[0]+" - "+f[1];return f;function v(d){return d===s[0]?"min":d===s[1]?"max":(+d).toFixed(Math.min(o,20))}},e.prototype.resetExtent=function(){var t=this.option,a=_nt([t.min,t.max]);this._dataExtent=a},e.prototype.getDataDimensionIndex=function(t){var a=this.option.dimension;if(a!=null)return t.getDimensionIndex(a);for(var n=t.dimensions,i=n.length-1;i>=0;i--){var o=n[i],s=t.getDimensionInfo(o);if(!s.isCalculationCoord)return s.storeDimIndex}},e.prototype.getExtent=function(){return this._dataExtent.slice()},e.prototype.completeVisualOption=function(){var t=this.ecModel,a=this.option,n={inRange:a.inRange,outOfRange:a.outOfRange},i=a.target||(a.target={}),o=a.controller||(a.controller={});zt(i,n),zt(o,n);var s=this.isCategory();l.call(this,i),l.call(this,o),u.call(this,i,"inRange","outOfRange"),f.call(this,o);function l(v){mnt(a.color)&&!v.inRange&&(v.inRange={color:a.color.slice().reverse()}),v.inRange=v.inRange||{color:t.get("gradientColor")}}function u(v,d,p){var y=v[d],m=v[p];y&&!m&&(m=v[p]={},tN(y,function(_,S){if(ar.isValidType(S)){var b=rB.get(S,"inactive",s);b!=null&&(m[S]=b,S==="color"&&!m.hasOwnProperty("opacity")&&!m.hasOwnProperty("colorAlpha")&&(m.opacity=[0,0]))}}))}function f(v){var d=(v.inRange||{}).symbol||(v.outOfRange||{}).symbol,p=(v.inRange||{}).symbolSize||(v.outOfRange||{}).symbolSize,y=this.get("inactiveColor"),m=this.getItemSymbol(),_=m||"roundRect";tN(this.stateList,function(S){var b=this.itemSize,w=v[S];w||(w=v[S]={color:s?y:[y]}),w.symbol==null&&(w.symbol=d&&Dt(d)||(s?_:[_])),w.symbolSize==null&&(w.symbolSize=p&&Dt(p)||(s?b[0]:[b[0],b[0]])),w.symbol=JI(w.symbol,function(C){return C==="none"?_:C});var A=w.symbolSize;if(A!=null){var M=-1/0;ynt(A,function(C){C>M&&(M=C)}),w.symbolSize=JI(A,function(C){return xnt(C,[0,M],[0,b[0]],!0)})}},this)}},e.prototype.resetItemSize=function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},e.prototype.isCategory=function(){return!!this.option.categories},e.prototype.setSelected=function(t){},e.prototype.getSelected=function(){return null},e.prototype.getValueState=function(t){return null},e.prototype.getVisualMeta=function(t){return null},e.type="visualMap",e.dependencies=["series"],e.defaultOption={show:!0,z:4,seriesIndex:"all",min:0,max:200,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,textStyle:{color:"#333"}},e})(jt),eN=[20,140],Snt=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.optionUpdated=function(t,a){r.prototype.optionUpdated.apply(this,arguments),this.resetExtent(),this.resetVisual(function(n){n.mappingMethod="linear",n.dataExtent=this.getExtent()}),this._resetRange()},e.prototype.resetItemSize=function(){r.prototype.resetItemSize.apply(this,arguments);var t=this.itemSize;(t[0]==null||isNaN(t[0]))&&(t[0]=eN[0]),(t[1]==null||isNaN(t[1]))&&(t[1]=eN[1])},e.prototype._resetRange=function(){var t=this.getExtent(),a=this.option.range;!a||a.auto?(t.auto=1,this.option.range=t):it(a)&&(a[0]>a[1]&&a.reverse(),a[0]=Math.max(a[0],t[0]),a[1]=Math.min(a[1],t[1]))},e.prototype.completeVisualOption=function(){r.prototype.completeVisualOption.apply(this,arguments),P(this.stateList,function(t){var a=this.option.controller[t].symbolSize;a&&a[0]!==a[1]&&(a[0]=a[1]/3)},this)},e.prototype.setSelected=function(t){this.option.range=t.slice(),this._resetRange()},e.prototype.getSelected=function(){var t=this.getExtent(),a=Ga((this.get("range")||[]).slice());return a[0]>t[1]&&(a[0]=t[1]),a[1]>t[1]&&(a[1]=t[1]),a[0]=n[1]||t<=a[1])?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var a=[];return this.eachTargetSeries(function(n){var i=[],o=n.getData();o.each(this.getDataDimensionIndex(o),function(s,l){t[0]<=s&&s<=t[1]&&i.push(l)},this),a.push({seriesId:n.id,dataIndex:i})},this),a},e.prototype.getVisualMeta=function(t){var a=rN(this,"outOfRange",this.getExtent()),n=rN(this,"inRange",this.option.range.slice()),i=[];function o(p,y){i.push({value:p,color:t(p,y)})}for(var s=0,l=0,u=n.length,f=a.length;lt[1])break;i.push({color:this.getControllerVisual(l,"color",a),offset:s/n})}return i.push({color:this.getControllerVisual(t[1],"color",a),offset:1}),i},e.prototype._createBarPoints=function(t,a){var n=this.visualMapModel.itemSize;return[[n[0]-a[0],t[0]],[n[0],t[0]],[n[0],t[1]],[n[0]-a[1],t[1]]]},e.prototype._createBarGroup=function(t){var a=this._orient,n=this.visualMapModel.get("inverse");return new Ct(a==="horizontal"&&!n?{scaleX:t==="bottom"?1:-1,rotation:Math.PI/2}:a==="horizontal"&&n?{scaleX:t==="bottom"?-1:1,rotation:-Math.PI/2}:a==="vertical"&&!n?{scaleX:t==="left"?1:-1,scaleY:-1}:{scaleX:t==="left"?1:-1})},e.prototype._updateHandle=function(t,a){if(this._useHandle){var n=this._shapes,i=this.visualMapModel,o=n.handleThumbs,s=n.handleLabels,l=i.itemSize,u=i.getExtent();bnt([0,1],function(f){var v=o[f];v.setStyle("fill",a.handlesColor[f]),v.y=t[f];var d=wn(t[f],[0,l[1]],u,!0),p=this.getControllerVisual(d,"symbolSize");v.scaleX=v.scaleY=p/l[0],v.x=l[0]-p/2;var y=sn(n.handleLabelPoints[f],Ws(v,this.group));s[f].setStyle({x:y[0],y:y[1],text:i.formatValueText(this._dataInterval[f]),verticalAlign:"middle",align:this._orient==="vertical"?this._applyTransform("left",n.mainGroup):"center"})},this)}},e.prototype._showIndicator=function(t,a,n,i){var o=this.visualMapModel,s=o.getExtent(),l=o.itemSize,u=[0,l[1]],f=this._shapes,v=f.indicator;if(v){v.attr("invisible",!1);var d={convertOpacityToAlpha:!0},p=this.getControllerVisual(t,"color",d),y=this.getControllerVisual(t,"symbolSize"),m=wn(t,s,u,!0),_=l[0]-y/2,S={x:v.x,y:v.y};v.y=m,v.x=_;var b=sn(f.indicatorLabelPoint,Ws(v,this.group)),w=f.indicatorLabel;w.attr("invisible",!1);var A=this._applyTransform("left",f.mainGroup),M=this._orient,C=M==="horizontal";w.setStyle({text:(n||"")+o.formatValueText(a),verticalAlign:C?A:"middle",align:C?"center":A});var L={x:_,y:m,style:{fill:p}},E={style:{x:b[0],y:b[1]}};if(o.ecModel.isAnimationEnabled()&&!this._firstShowIndicator){var R={duration:100,easing:"cubicInOut",additive:!0};v.x=S.x,v.y=S.y,v.animateTo(L,R),w.animateTo(E,R)}else v.attr(L),w.attr(E);this._firstShowIndicator=!1;var N=this._shapes.handleLabels;if(N)for(var O=0;Oo[1]&&(v[1]=1/0),a&&(v[0]===-1/0?this._showIndicator(f,v[1],"< ",l):v[1]===1/0?this._showIndicator(f,v[0],"> ",l):this._showIndicator(f,f,"≈ ",l));var d=this._hoverLinkDataIndices,p=[];(a||oN(n))&&(p=this._hoverLinkDataIndices=n.findTargetDataIndices(v));var y=N8(d,p);this._dispatchHighDown("downplay",Fp(y[0],n)),this._dispatchHighDown("highlight",Fp(y[1],n))}},e.prototype._hoverLinkFromSeriesMouseOver=function(t){var a;if(Vs(t.target,function(l){var u=Rt(l);if(u.dataIndex!=null)return a=u,!0},!0),!!a){var n=this.ecModel.getSeriesByIndex(a.seriesIndex),i=this.visualMapModel;if(i.isTargetSeries(n)){var o=n.getData(a.dataType),s=o.getStore().get(i.getDataDimensionIndex(o),a.dataIndex);isNaN(s)||this._showIndicator(s,s)}}},e.prototype._hideIndicator=function(){var t=this._shapes;t.indicator&&t.indicator.attr("invisible",!0),t.indicatorLabel&&t.indicatorLabel.attr("invisible",!0);var a=this._shapes.handleLabels;if(a)for(var n=0;n=0&&(i.dimension=o,a.push(i))}}),r.getData().setVisual("visualMeta",a)}}];function Ent(r,e,t,a){for(var n=e.targetVisuals[a],i=ar.prepareVisualTypes(n),o={color:Fh(r.getData(),"color")},s=0,l=i.length;s0:e.splitNumber>0)||e.calculable)?"continuous":"piecewise"}),r.registerAction(Cnt,Mnt),P(Lnt,function(e){r.registerVisual(r.PRIORITY.VISUAL.COMPONENT,e)}),r.registerPreprocessor(Rnt))}function oB(r){r.registerComponentModel(Snt),r.registerComponentView(Ant),iB(r)}var Int=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t._pieceList=[],t}return e.prototype.optionUpdated=function(t,a){r.prototype.optionUpdated.apply(this,arguments),this.resetExtent();var n=this._mode=this._determineMode();this._pieceList=[],Nnt[this._mode].call(this,this._pieceList),this._resetSelected(t,a);var i=this.option.categories;this.resetVisual(function(o,s){n==="categories"?(o.mappingMethod="category",o.categories=Dt(i)):(o.dataExtent=this.getExtent(),o.mappingMethod="piecewise",o.pieceList=st(this._pieceList,function(l){return l=Dt(l),s!=="inRange"&&(l.visual=null),l}))})},e.prototype.completeVisualOption=function(){var t=this.option,a={},n=ar.listVisualTypes(),i=this.isCategory();P(t.pieces,function(s){P(n,function(l){s.hasOwnProperty(l)&&(a[l]=1)})}),P(a,function(s,l){var u=!1;P(this.stateList,function(f){u=u||o(t,f,l)||o(t.target,f,l)},this),!u&&P(this.stateList,function(f){(t[f]||(t[f]={}))[l]=rB.get(l,f==="inRange"?"active":"inactive",i)})},this);function o(s,l,u){return s&&s[l]&&s[l].hasOwnProperty(u)}r.prototype.completeVisualOption.apply(this,arguments)},e.prototype._resetSelected=function(t,a){var n=this.option,i=this._pieceList,o=(a?n:t).selected||{};if(n.selected=o,P(i,function(l,u){var f=this.getSelectedMapKey(l);o.hasOwnProperty(f)||(o[f]=!0)},this),n.selectedMode==="single"){var s=!1;P(i,function(l,u){var f=this.getSelectedMapKey(l);o[f]&&(s?o[f]=!1:s=!0)},this)}},e.prototype.getItemSymbol=function(){return this.get("itemSymbol")},e.prototype.getSelectedMapKey=function(t){return this._mode==="categories"?t.value+"":t.index+""},e.prototype.getPieceList=function(){return this._pieceList},e.prototype._determineMode=function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},e.prototype.setSelected=function(t){this.option.selected=Dt(t)},e.prototype.getValueState=function(t){var a=ar.findPieceIndex(t,this._pieceList);return a!=null&&this.option.selected[this.getSelectedMapKey(this._pieceList[a])]?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var a=[],n=this._pieceList;return this.eachTargetSeries(function(i){var o=[],s=i.getData();s.each(this.getDataDimensionIndex(s),function(l,u){var f=ar.findPieceIndex(l,n);f===t&&o.push(u)},this),a.push({seriesId:i.id,dataIndex:o})},this),a},e.prototype.getRepresentValue=function(t){var a;if(this.isCategory())a=t.value;else if(t.value!=null)a=t.value;else{var n=t.interval||[];a=n[0]===-1/0&&n[1]===1/0?0:(n[0]+n[1])/2}return a},e.prototype.getVisualMeta=function(t){if(this.isCategory())return;var a=[],n=["",""],i=this;function o(f,v){var d=i.getRepresentValue({interval:f});v||(v=i.getValueState(d));var p=t(d,v);f[0]===-1/0?n[0]=p:f[1]===1/0?n[1]=p:a.push({value:f[0],color:p},{value:f[1],color:p})}var s=this._pieceList.slice();if(!s.length)s.push({interval:[-1/0,1/0]});else{var l=s[0].interval[0];l!==-1/0&&s.unshift({interval:[-1/0,l]}),l=s[s.length-1].interval[1],l!==1/0&&s.push({interval:[l,1/0]})}var u=-1/0;return P(s,function(f){var v=f.interval;v&&(v[0]>u&&o([u,v[0]],"outOfRange"),o(v.slice()),u=v[1])},this),{stops:a,outerColors:n}},e.type="visualMap.piecewise",e.defaultOption=zo(zg.defaultOption,{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieces:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0}),e})(zg),Nnt={splitNumber:function(r){var e=this.option,t=Math.min(e.precision,20),a=this.getExtent(),n=e.splitNumber;n=Math.max(parseInt(n,10),1),e.splitNumber=n;for(var i=(a[1]-a[0])/n;+i.toFixed(t)!==i&&t<5;)t++;e.precision=t,i=+i.toFixed(t),e.minOpen&&r.push({interval:[-1/0,a[0]],close:[0,0]});for(var o=0,s=a[0];o","≥"][a[0]]];t.text=t.text||this.formatValueText(t.value!=null?t.value:t.interval,!1,n)},this)}};function cN(r,e){var t=r.inverse;(r.orient==="vertical"?!t:t)&&e.reverse()}var Pnt=(function(r){$(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type=e.type,t}return e.prototype.doRender=function(){var t=this.group;t.removeAll();var a=this.visualMapModel,n=a.get("textGap"),i=a.textStyleModel,o=i.getFont(),s=i.getTextColor(),l=this._getItemAlign(),u=a.itemSize,f=this._getViewData(),v=f.endsText,d=fr(a.get("showLabel",!0),!v);v&&this._renderEndsText(t,v[0],u,d,l),P(f.viewPieceList,function(p){var y=p.piece,m=new Ct;m.onclick=dt(this._onItemClick,this,y),this._enableHoverLink(m,p.indexInModelPieceList);var _=a.getRepresentValue(y);if(this._createItemSymbol(m,_,[0,0,u[0],u[1]]),d){var S=this.visualMapModel.getValueState(_);m.add(new $t({style:{x:l==="right"?-n:u[0]+n,y:u[1]/2,text:y.text,verticalAlign:"middle",align:l,font:o,fill:s,opacity:S==="outOfRange"?.5:1}}))}t.add(m)},this),v&&this._renderEndsText(t,v[1],u,d,l),qs(a.get("orient"),t,a.get("itemGap")),this.renderBackground(t),this.positionGroup(t)},e.prototype._enableHoverLink=function(t,a){var n=this;t.on("mouseover",function(){return i("highlight")}).on("mouseout",function(){return i("downplay")});var i=function(o){var s=n.visualMapModel;s.option.hoverLink&&n.api.dispatchAction({type:o,batch:Fp(s.findTargetDataIndices(a),s)})}},e.prototype._getItemAlign=function(){var t=this.visualMapModel,a=t.option;if(a.orient==="vertical")return nB(t,this.api,t.itemSize);var n=a.align;return(!n||n==="auto")&&(n="left"),n},e.prototype._renderEndsText=function(t,a,n,i,o){if(a){var s=new Ct,l=this.visualMapModel.textStyleModel;s.add(new $t({style:xe(l,{x:i?o==="right"?n[0]:0:n[0]/2,y:n[1]/2,verticalAlign:"middle",align:i?o:"center",text:a})})),t.add(s)}},e.prototype._getViewData=function(){var t=this.visualMapModel,a=st(t.getPieceList(),function(s,l){return{piece:s,indexInModelPieceList:l}}),n=t.get("text"),i=t.get("orient"),o=t.get("inverse");return(i==="horizontal"?o:!o)?a.reverse():n&&(n=n.slice().reverse()),{viewPieceList:a,endsText:n}},e.prototype._createItemSymbol=function(t,a,n){t.add(Ye(this.getControllerVisual(a,"symbol"),n[0],n[1],n[2],n[3],this.getControllerVisual(a,"color")))},e.prototype._onItemClick=function(t){var a=this.visualMapModel,n=a.option,i=n.selectedMode;if(i){var o=Dt(n.selected),s=a.getSelectedMapKey(t);i==="single"||i===!0?(o[s]=!0,P(o,function(l,u){o[u]=u===s})):o[s]=!o[s],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:o})}},e.type="visualMap.piecewise",e})(aB);function sB(r){r.registerComponentModel(Int),r.registerComponentView(Pnt),iB(r)}function Ont(r){Ht(oB),Ht(sB)}var znt={label:{enabled:!0},decal:{show:!1}},fN=Kt(),knt={};function Bnt(r,e){var t=r.getModel("aria");if(!t.get("enabled"))return;var a=Dt(znt);zt(a.label,r.getLocaleModel().get("aria"),!1),zt(t.option,a,!1),n(),i();function n(){var u=t.getModel("decal"),f=u.get("show");if(f){var v=xt();r.eachSeries(function(d){if(!d.isColorBySeries()){var p=v.get(d.type);p||(p={},v.set(d.type,p)),fN(d).scope=p}}),r.eachRawSeries(function(d){if(r.isSeriesFiltered(d))return;if(bt(d.enableAriaDecal)){d.enableAriaDecal();return}var p=d.getData();if(d.isColorBySeries()){var b=nS(d.ecModel,d.name,knt,r.getSeriesCount()),w=p.getVisual("decal");p.setVisual("decal",A(w,b))}else{var y=d.getRawData(),m={},_=fN(d).scope;p.each(function(M){var C=p.getRawIndex(M);m[C]=M});var S=y.count();y.each(function(M){var C=m[M],L=y.getName(M)||M+"",E=nS(d.ecModel,L,_,S),R=p.getItemVisual(C,"decal");p.setItemVisual(C,"decal",A(R,E))})}function A(M,C){var L=M?et(et({},C),M):C;return L.dirty=!0,L}})}}function i(){var u=r.getLocaleModel().get("aria"),f=t.getModel("label");if(f.option=wt(f.option,u),!!f.get("enabled")){var v=e.getZr().dom;if(f.get("description")){v.setAttribute("aria-label",f.get("description"));return}var d=r.getSeriesCount(),p=f.get(["data","maxCount"])||10,y=f.get(["series","maxCount"])||10,m=Math.min(d,y),_;if(!(d<1)){var S=s();if(S){var b=f.get(["general","withTitle"]);_=o(b,{title:S})}else _=f.get(["general","withoutTitle"]);var w=[],A=d>1?f.get(["series","multiple","prefix"]):f.get(["series","single","prefix"]);_+=o(A,{seriesCount:d}),r.eachSeries(function(E,R){if(R1?f.get(["series","multiple",k]):f.get(["series","single",k]),N=o(N,{seriesId:E.seriesIndex,seriesName:E.get("name"),seriesType:l(E.subType)});var G=E.getData();if(G.count()>p){var H=f.get(["data","partialData"]);N+=o(H,{displayCnt:p})}else N+=f.get(["data","allData"]);for(var F=f.get(["data","separator","middle"]),B=f.get(["data","separator","end"]),j=[],Y=0;Y":"gt",">=":"gte","=":"eq","!=":"ne","<>":"ne"},Hnt=(function(){function r(e){var t=this._condVal=vt(e)?new RegExp(e):eG(e)?e:null;if(t==null){var a="";ne(a)}}return r.prototype.evaluate=function(e){var t=typeof e;return vt(t)?this._condVal.test(e):Qt(t)?this._condVal.test(e+""):!1},r})(),Unt=(function(){function r(){}return r.prototype.evaluate=function(){return this.value},r})(),Fnt=(function(){function r(){}return r.prototype.evaluate=function(){for(var e=this.children,t=0;t2&&a.push(n),n=[G,H]}function f(G,H,F,B){Du(G,F)&&Du(H,B)||n.push(G,H,F,B,F,B)}function v(G,H,F,B,j,Y){var K=Math.abs(H-G),nt=Math.tan(K/4)*4/3,U=HE:O2&&a.push(n),a}function ob(r,e,t,a,n,i,o,s,l,u){if(Du(r,t)&&Du(e,a)&&Du(n,o)&&Du(i,s)){l.push(o,s);return}var f=2/u,v=f*f,d=o-r,p=s-e,y=Math.sqrt(d*d+p*p);d/=y,p/=y;var m=t-r,_=a-e,S=n-o,b=i-s,w=m*m+_*_,A=S*S+b*b;if(w=0&&E=0){l.push(o,s);return}var R=[],N=[];Lo(r,t,n,o,.5,R),Lo(e,a,i,s,.5,N),ob(R[0],N[0],R[1],N[1],R[2],N[2],R[3],N[3],l,u),ob(R[4],N[4],R[5],N[5],R[6],N[6],R[7],N[7],l,u)}function ait(r,e){var t=ib(r),a=[];e=e||1;for(var n=0;n0)for(var u=0;uMath.abs(u),v=uB([l,u],f?0:1,e),d=(f?s:u)/v.length,p=0;pn,o=uB([a,n],i?0:1,e),s=i?"width":"height",l=i?"height":"width",u=i?"x":"y",f=i?"y":"x",v=r[s]/o.length,d=0;d1?null:new Pt(m*l+r,m*u+e)}function oit(r,e,t){var a=new Pt;Pt.sub(a,t,e),a.normalize();var n=new Pt;Pt.sub(n,r,e);var i=n.dot(a);return i}function gu(r,e){var t=r[r.length-1];t&&t[0]===e[0]&&t[1]===e[1]||r.push(e)}function sit(r,e,t){for(var a=r.length,n=[],i=0;io?(u.x=f.x=s+i/2,u.y=l,f.y=l+o):(u.y=f.y=l+o/2,u.x=s,f.x=s+i),sit(e,u,f)}function kg(r,e,t,a){if(t===1)a.push(e);else{var n=Math.floor(t/2),i=r(e);kg(r,i[0],n,a),kg(r,i[1],t-n,a)}return a}function lit(r,e){for(var t=[],a=0;a0;u/=2){var f=0,v=0;(r&u)>0&&(f=1),(e&u)>0&&(v=1),s+=u*u*(3*f^v),v===0&&(f===1&&(r=u-1-r,e=u-1-e),l=r,r=e,e=l)}return s}function Gg(r){var e=1/0,t=1/0,a=-1/0,n=-1/0,i=st(r,function(s){var l=s.getBoundingRect(),u=s.getComputedTransform(),f=l.x+l.width/2+(u?u[4]:0),v=l.y+l.height/2+(u?u[5]:0);return e=Math.min(f,e),t=Math.min(v,t),a=Math.max(f,a),n=Math.max(v,n),[f,v]}),o=st(i,function(s,l){return{cp:s,z:yit(s[0],s[1],e,t,a,n),path:r[l]}});return o.sort(function(s,l){return s.z-l.z}).map(function(s){return s.path})}function hB(r){return fit(r.path,r.count)}function sb(){return{fromIndividuals:[],toIndividuals:[],count:0}}function mit(r,e,t){var a=[];function n(M){for(var C=0;C=0;n--)if(!t[n].many.length){var l=t[s].many;if(l.length<=1)if(s)s=0;else return t;var i=l.length,u=Math.ceil(i/2);t[n].many=l.slice(u,i),t[s].many=l.slice(0,u),s++}return t}var xit={clone:function(r){for(var e=[],t=1-Math.pow(1-r.path.style.opacity,1/r.count),a=0;a0))return;var s=a.getModel("universalTransition").get("delay"),l=Object.assign({setToFinal:!0},o),u,f;xN(r)&&(u=r,f=e),xN(e)&&(u=e,f=r);function v(S,b,w,A,M){var C=S.many,L=S.one;if(C.length===1&&!M){var E=b?C[0]:L,R=b?L:C[0];if(Bg(E))v({many:[E],one:R},!0,w,A,!0);else{var N=s?wt({delay:s(w,A)},l):l;vw(E,R,N),i(E,R,E,R,N)}}else for(var O=wt({dividePath:xit[t],individualDelay:s&&function(j,Y,K,nt){return s(j+w,A)}},l),k=b?mit(C,L,O):_it(L,C,O),G=k.fromIndividuals,H=k.toIndividuals,F=G.length,B=0;Be.length,p=u?SN(f,u):SN(d?e:r,[d?r:e]),y=0,m=0;mvB))for(var n=a.getIndices(),i=bit(a),o=0;o0&&A.group.traverse(function(C){C instanceof Ut&&!C.animators.length&&C.animateFrom({style:{opacity:0}},M)})})}function wN(r){var e=r.getModel("universalTransition").get("seriesKey");return e||r.id}function TN(r){return it(r)?r.sort().join(","):r}function fo(r){if(r.hostModel)return r.hostModel.getModel("universalTransition").get("divideShape")}function Ait(r,e){var t=xt(),a=xt(),n=xt();return P(r.oldSeries,function(i,o){var s=r.oldDataGroupIds[o],l=r.oldData[o],u=wN(i),f=TN(u);a.set(f,{dataGroupId:s,data:l}),it(u)&&P(u,function(v){n.set(v,{key:f,dataGroupId:s,data:l})})}),P(e.updatedSeries,function(i){if(i.isUniversalTransitionEnabled()&&i.isAnimationEnabled()){var o=i.get("dataGroupId"),s=i.getData(),l=wN(i),u=TN(l),f=a.get(u);if(f)t.set(u,{oldSeries:[{dataGroupId:f.dataGroupId,divide:fo(f.data),data:f.data}],newSeries:[{dataGroupId:o,divide:fo(s),data:s}]});else if(it(l)){var v=[];P(l,function(y){var m=a.get(y);m.data&&v.push({dataGroupId:m.dataGroupId,divide:fo(m.data),data:m.data})}),v.length&&t.set(u,{oldSeries:v,newSeries:[{dataGroupId:o,data:s,divide:fo(s)}]})}else{var d=n.get(l);if(d){var p=t.get(d.key);p||(p={oldSeries:[{dataGroupId:d.dataGroupId,data:d.data,divide:fo(d.data)}],newSeries:[]},t.set(d.key,p)),p.newSeries.push({dataGroupId:o,data:s,divide:fo(s)})}}}}),t}function AN(r,e){for(var t=0;t=0&&n.push({dataGroupId:e.oldDataGroupIds[s],data:e.oldData[s],divide:fo(e.oldData[s]),dim:o.dimension})}),P(he(r.to),function(o){var s=AN(t.updatedSeries,o);if(s>=0){var l=t.updatedSeries[s].getData();i.push({dataGroupId:e.oldDataGroupIds[s],data:l,divide:fo(l),dim:o.dimension})}}),n.length>0&&i.length>0&&dB(n,i,a)}function Cit(r){r.registerUpdateLifecycle("series:beforeupdate",function(e,t,a){P(he(a.seriesTransition),function(n){P(he(n.to),function(i){for(var o=a.updatedSeries,s=0;s{if(!i.current||r.length===0)return;o.current||(o.current=wj(i.current));const u=o.current,f=r.map(L=>{const E=new Date(L.time);return`${E.getHours().toString().padStart(2,"0")}:${E.getMinutes().toString().padStart(2,"0")}`}),v=r.map(L=>[L.open,L.close,L.low,L.high]),d=r.map(L=>L.volume),p=e.map(L=>L.dif),y=e.map(L=>L.dea),m=e.map(L=>({value:L.macd,itemStyle:{color:L.macd>=0?"#7dd75a":"#ef4444"}})),_=[];t.forEach((L,E)=>{_.push({yAxis:L,name:`压力${E+1}`,lineStyle:{color:"#ef4444",type:"solid",width:1.5},label:{formatter:`压力{${E+1}}: {c}`,color:"#ef4444",fontSize:11}})}),a.forEach((L,E)=>{_.push({yAxis:L,name:`支撑${E+1}`,lineStyle:{color:"#7dd75a",type:"solid",width:1.5},label:{formatter:`支撑{${E+1}}: {c}`,color:"#7dd75a",fontSize:11}})});const S=L=>{const E=[];for(let R=0;R{const E=L.find(Y=>Y.seriesName==="K线"),R=L.find(Y=>Y.seriesName==="成交量"),N=L.find(Y=>Y.seriesName==="MACD");if(!E)return"";const O=E.data,k=O[1],G=O[2],H=O[3],F=O[4],B=((G-k)/k*100).toFixed(2),j=G>=k?"#7dd75a":"#ef4444";return` +
+
${E.axisValue}
+
+ 开盘:${k.toFixed(2)} + 最高:${F.toFixed(2)} + 最低:${H.toFixed(2)} + 收盘:${G.toFixed(2)} (${B}%) + ${R?`成交量:${R.data.toLocaleString()}`:""} + ${N?`MACD:${N.data.toFixed(4)}`:""} +
+
+ `}},axisPointer:{link:[{xAxisIndex:"all"}],label:{backgroundColor:"#0d5d1b"}},grid:[{left:"3%",right:"3%",top:"5%",height:"50%",containLabel:!0},{left:"3%",right:"3%",top:"58%",height:"15%",containLabel:!0},{left:"3%",right:"3%",top:"76%",height:"18%",containLabel:!0}],xAxis:[{type:"category",data:f,boundaryGap:!0,axisLine:{lineStyle:{color:"#3f3f46"}},axisLabel:{color:"#a1a1aa",fontSize:10},axisTick:{show:!1},splitLine:{show:!1}},{type:"category",gridIndex:1,data:f,boundaryGap:!0,axisLine:{show:!1},axisLabel:{show:!1},axisTick:{show:!1},splitLine:{show:!1}},{type:"category",gridIndex:2,data:f,boundaryGap:!0,axisLine:{lineStyle:{color:"#3f3f46"}},axisLabel:{color:"#a1a1aa",fontSize:10},axisTick:{show:!1},splitLine:{show:!1}}],yAxis:[{scale:!0,axisLine:{lineStyle:{color:"#3f3f46"}},axisLabel:{color:"#a1a1aa",fontSize:10},splitLine:{lineStyle:{color:"#27272a",type:"dashed"}},position:"right"},{scale:!0,gridIndex:1,axisLine:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},{scale:!0,gridIndex:2,axisLine:{lineStyle:{color:"#3f3f46"}},axisLabel:{color:"#a1a1aa",fontSize:10},splitLine:{lineStyle:{color:"#27272a",type:"dashed"}},position:"right"}],dataZoom:[{type:"inside",xAxisIndex:[0,1,2],start:50,end:100},{type:"slider",xAxisIndex:[0,1,2],start:50,end:100,height:20,bottom:0,borderColor:"#3f3f46",fillerColor:"rgba(125, 215, 90, 0.2)",handleStyle:{color:"#7dd75a"},textStyle:{color:"#a1a1aa"}}],series:[{name:"K线",type:"candlestick",data:v,itemStyle:{color:"#7dd75a",color0:"#ef4444",borderColor:"#7dd75a",borderColor0:"#ef4444"},markLine:{symbol:"none",data:_,animation:!0}},{name:"MA5",type:"line",data:b,smooth:!0,showSymbol:!1,lineStyle:{color:"#fbbf24",width:1}},{name:"MA10",type:"line",data:w,smooth:!0,showSymbol:!1,lineStyle:{color:"#60a5fa",width:1}},{name:"MA20",type:"line",data:A,smooth:!0,showSymbol:!1,lineStyle:{color:"#c084fc",width:1}},{name:"成交量",type:"bar",xAxisIndex:1,yAxisIndex:1,data:d,itemStyle:{color:L=>{const E=L.dataIndex,R=r[E]?.close,N=r[E]?.open;return R>=N?"rgba(125, 215, 90, 0.6)":"rgba(239, 68, 68, 0.6)"}}},{name:"MACD",type:"bar",xAxisIndex:2,yAxisIndex:2,data:m},{name:"DIF",type:"line",xAxisIndex:2,yAxisIndex:2,data:p,smooth:!0,showSymbol:!1,lineStyle:{color:"#fbbf24",width:1.5}},{name:"DEA",type:"line",xAxisIndex:2,yAxisIndex:2,data:y,smooth:!0,showSymbol:!1,lineStyle:{color:"#60a5fa",width:1.5}}]};u.setOption(M),l(!1);const C=()=>{u.resize()};return window.addEventListener("resize",C),()=>{window.removeEventListener("resize",C)}},[r,e,t,a]),z.jsxs("div",{"code-path":"src/components/KLineChart.tsx:361:5",className:"relative",children:[s&&z.jsx("div",{"code-path":"src/components/KLineChart.tsx:363:9",className:"absolute inset-0 flex items-center justify-center bg-[#09090b]/80 z-10",children:z.jsxs("div",{"code-path":"src/components/KLineChart.tsx:364:11",className:"flex items-center gap-2 text-[#7dd75a]",children:[z.jsx("div",{"code-path":"src/components/KLineChart.tsx:365:13",className:"w-5 h-5 border-2 border-[#7dd75a] border-t-transparent rounded-full animate-spin"}),z.jsx("span",{"code-path":"src/components/KLineChart.tsx:366:13",className:"text-sm",children:"加载中..."})]})}),z.jsx("div",{"code-path":"src/components/KLineChart.tsx:370:7",ref:i,style:{height:`${n}px`},className:"w-full"})]})}const Lit={heatIndex:78.5,heatChange:5.2,upCount:156,downCount:89,capitalFlow:28.5,volatilityIndex:23.8,volatilityChange:-1.2},gx=[{id:"1",title:"地缘政治风险升级",time:"2025-03-02",summary:'美以袭伊朗,"海上油阀"被关,中东局势紧张升级',affectedProducts:["原油","黄金","白银","燃油"],impact:"bullish",impactLevel:5,analysis:"地缘政治风险急剧升温,霍尔木兹海峡封锁风险上升。原油供应中断担忧推动油价上涨,避险资产黄金、白银同步走强。短期油价易涨难跌,建议关注原油、黄金相关品种做多机会。",risks:["冲突升级可能","供应中断风险","波动率激增"]},{id:"2",title:"黄金价格创历史新高",time:"2025-03-01",summary:"COMEX黄金突破3100美元关口,避险需求强劲",affectedProducts:["黄金","白银","铂金","美元指数"],impact:"bullish",impactLevel:4,analysis:'特朗普关税政策"2.0"版本引发市场担忧,叠加地缘政治风险,黄金避险属性凸显。技术面突破历史高点,多头趋势强劲。预计金价短期维持强势,回调即是买入机会。',risks:["获利回吐压力","美元反弹风险","美联储政策转向"]},{id:"3",title:"铜供应紧张预期",time:"2025-02-28",summary:"全球铜市场预计出现18万吨供应缺口,美国或加征铜进口关税",affectedProducts:["铜","铝","镍","锌"],impact:"bullish",impactLevel:4,analysis:"铜精矿TC现货指数持续回落,矿山供应增长放缓。美国可能加征铜进口关税,刺激美铜价格上涨,全球套利行为收紧供应。需求端新能源产业用铜需求快速增长,供需矛盾支撑铜价。",risks:["需求放缓风险","美元走强压制","库存累积"]},{id:"4",title:"美联储通胀数据超预期",time:"2025-02-27",summary:"核心PCE数据超预期,降息预期降温",affectedProducts:["美元指数","黄金","原油","大宗商品"],impact:"bearish",impactLevel:3,analysis:"美国2月核心PCE通胀数据超预期,市场对美联储降息预期降温。美元指数短期获得支撑,对大宗商品形成一定压制。但地缘政治风险对冲了部分利空影响。",risks:["加息预期升温","美元持续走强","风险资产抛售"]},{id:"5",title:"OPEC+减产延期预期",time:"2025-02-26",summary:"OPEC+可能延长减产协议至二季度末",affectedProducts:["原油","燃油","沥青","石化品种"],impact:"bullish",impactLevel:3,analysis:"OPEC+成员国倾向于延长减产协议以支撑油价。全球原油需求预期改善,叠加供应端约束,原油市场供需格局趋紧。关注减产协议正式落地情况。",risks:["减产执行力度","非OPEC增产","需求不及预期"]}],Ly=[{id:"1",name:"原油",code:"SC",category:"energy",price:528.6,change:12.1,changePercent:2.35,open:518,high:535,low:515.5,volume:285600,openInterest:125800,trendScore:85,successRate:72,cycles:{m5:"up",m15:"up",m30:"up",m60:"sideways"},keyLevels:{resistance:[535,542,550],support:[518,510,500]},recommendation:"long",recommendationReason:"地缘政治风险推动,多周期共振向上"},{id:"2",name:"黄金",code:"AU",category:"metal",price:685.2,change:12.45,changePercent:1.85,open:675,high:692,low:672,volume:456200,openInterest:215600,trendScore:92,successRate:78,cycles:{m5:"up",m15:"up",m30:"up",m60:"up"},keyLevels:{resistance:[692,700,710],support:[678,670,660]},recommendation:"long",recommendationReason:"创历史新高,趋势强劲,避险需求旺盛"},{id:"3",name:"铜",code:"CU",category:"metal",price:80610,change:112,changePercent:.14,open:80200,high:81200,low:79800,volume:125800,openInterest:98500,trendScore:65,successRate:58,cycles:{m5:"sideways",m15:"up",m30:"sideways",m60:"up"},keyLevels:{resistance:[81200,82e3,83e3],support:[79800,79e3,78e3]},recommendation:"wait",recommendationReason:"高位震荡,方向不明,建议观望"},{id:"4",name:"白银",code:"AG",category:"metal",price:8250,change:165,changePercent:2.04,open:8100,high:8350,low:8050,volume:325600,openInterest:185200,trendScore:88,successRate:75,cycles:{m5:"up",m15:"up",m30:"up",m60:"up"},keyLevels:{resistance:[8350,8500,8650],support:[8100,8e3,7850]},recommendation:"long",recommendationReason:"跟随黄金上涨,波动更大,机会更好"},{id:"5",name:"铁矿石",code:"I",category:"metal",price:785.5,change:28,changePercent:3.7,open:760,high:792,low:755,volume:185200,openInterest:95600,trendScore:82,successRate:68,cycles:{m5:"up",m15:"up",m30:"up",m60:"up"},keyLevels:{resistance:[792,800,815],support:[770,760,745]},recommendation:"long",recommendationReason:"黑色系领涨,需求预期改善"},{id:"6",name:"豆粕",code:"M",category:"agriculture",price:2985,change:-51,changePercent:-1.68,open:3040,high:3050,low:2960,volume:256800,openInterest:325600,trendScore:35,successRate:42,cycles:{m5:"down",m15:"down",m30:"down",m60:"sideways"},keyLevels:{resistance:[3050,3100,3180],support:[2960,2900,2820]},recommendation:"short",recommendationReason:"供应充足,需求疲软,短期偏弱"},{id:"7",name:"棕榈油",code:"P",category:"agriculture",price:8750,change:0,changePercent:0,open:8720,high:8820,low:8680,volume:125600,openInterest:185200,trendScore:50,successRate:52,cycles:{m5:"sideways",m15:"sideways",m30:"sideways",m60:"sideways"},keyLevels:{resistance:[8820,8900,9050],support:[8680,8600,8450]},recommendation:"wait",recommendationReason:"横盘整理,等待方向选择"},{id:"8",name:"集运指数",code:"EC",category:"financial",price:2150,change:196,changePercent:10.06,open:1960,high:2200,low:1940,volume:85600,openInterest:45600,trendScore:90,successRate:80,cycles:{m5:"up",m15:"up",m30:"up",m60:"up"},keyLevels:{resistance:[2200,2300,2400],support:[2e3,1900,1800]},recommendation:"long",recommendationReason:"涨停突破,地缘风险推升运价"}],DN=[{id:"1",title:"中东地缘风险急剧升温",affectedProducts:["原油","黄金","燃油"],riskLevel:"high",description:"美以与伊朗冲突升级,霍尔木兹海峡封锁风险上升",suggestion:"控制仓位,设置止损,关注局势发展",time:"2025-03-02 14:30"},{id:"2",title:"黄金价格创历史新高",affectedProducts:["黄金","白银"],riskLevel:"medium",description:"金价快速上涨后存在获利回吐风险",suggestion:"避免追高,等待回调后再入场",time:"2025-03-01 09:15"},{id:"3",title:"集运指数涨停",affectedProducts:["集运指数"],riskLevel:"high",description:"连续涨停后波动率激增,注意回调风险",suggestion:"减仓或获利了结,避免隔夜重仓",time:"2025-03-02 15:00"}];function Eit(r,e=100){const t=[];let a=r;const n=new Date;for(let i=e;i>=0;i--){const o=new Date(n.getTime()-i*5*60*1e3),s=a*.008,l=(Math.random()-.48)*s,u=a,f=a+l,v=Math.max(u,f)+Math.random()*s*.5,d=Math.min(u,f)-Math.random()*s*.5,p=Math.floor(Math.random()*1e4+5e3);t.push({time:o.toISOString(),open:Number(u.toFixed(2)),high:Number(v.toFixed(2)),low:Number(d.toFixed(2)),close:Number(f.toFixed(2)),volume:p}),a=f}return t}function Rit(r){const e=[];let t=r[0].close,a=r[0].close,n=0;const i=2/13,o=2/27,s=2/10;for(const l of r){t=l.close*i+t*(1-i),a=l.close*o+a*(1-o);const u=t-a;n=u*s+n*(1-s);const f=(u-n)*2;e.push({time:l.time,dif:Number(u.toFixed(4)),dea:Number(n.toFixed(4)),macd:Number(f.toFixed(4))})}return e}function Iit(r,e){const t=Ly.find(s=>s.id===r),a=t?.price||500,n=Eit(a,80),i=Rit(n),o=n.map(s=>({time:s.time,value:s.volume}));return{period:e,trend:t?.cycles[e]||"sideways",trendStrength:Math.floor(Math.random()*40)+60,klineData:n,volumeData:o,macdData:i,keyLevels:{resistance:t?.keyLevels.resistance||[],support:t?.keyLevels.support||[]}}}function Nit(r){const t=Ly.find(a=>a.id===r)?.price||500;return{macd:{signal:Math.random()>.5?"golden_cross":"neutral",value:Number((Math.random()*2-.5).toFixed(4))},rsi:{value:Math.floor(Math.random()*40)+30,status:"normal"},bollinger:{upper:t*1.03,middle:t,lower:t*.97,position:"middle"},kdj:{k:Math.floor(Math.random()*100),d:Math.floor(Math.random()*100),j:Math.floor(Math.random()*100),signal:Math.random()>.6?"golden_cross":"neutral"}}}function Pit(r){const e=Ly.find(i=>i.id===r),t=e?.price||500,a=e?.recommendation||"wait",n=t*.02;return{action:a,entryPrice:a==="long"?t-n*.3:t+n*.3,stopLoss:a==="long"?t-n:t+n,targetPrice:a==="long"?t+n*2:t-n*2,riskLevel:e?.trendScore&&e.trendScore>80?"low":e?.trendScore&&e.trendScore>60?"medium":"high",position:e?.trendScore&&e.trendScore>80?"medium":"light",holdingTime:"short",reason:e?.recommendationReason||"技术面与基本面综合判断"}}function Oit({label:r,isActive:e,onClick:t}){return z.jsx("button",{"code-path":"src/components/ProductDetail.tsx:23:5",onClick:t,className:`px-4 py-2 rounded-lg text-sm font-medium transition-all duration-200 ${e?"bg-[#7dd75a] text-[#09090b]":"bg-[#27272a] text-[#a1a1aa] hover:bg-[#3f3f46] hover:text-white"}`,children:r})}function bp({title:r,value:e,status:t,signal:a}){const n={positive:"text-[#7dd75a]",negative:"text-[#ef4444]",neutral:"text-[#a1a1aa]"};return z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:55:5",className:"p-3 rounded-lg border border-[#27272a] bg-[#09090b]",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:56:7",className:"text-xs text-[#71717a] mb-1",children:r}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:57:7",className:`text-sm font-medium ${a?n[a]:"text-white"}`,children:e}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:58:7",className:"text-xs text-[#a1a1aa] mt-1",children:t})]})}function CN({label:r,value:e,type:t}){return z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:74:5",className:"flex items-center justify-between py-2 border-b border-[#27272a]/50 last:border-0",children:[z.jsx("span",{"code-path":"src/components/ProductDetail.tsx:75:7",className:"text-sm text-[#a1a1aa]",children:r}),z.jsx("span",{"code-path":"src/components/ProductDetail.tsx:76:7",className:`text-sm font-mono font-medium ${t==="resistance"?"text-[#ef4444]":"text-[#7dd75a]"}`,children:e.toLocaleString()})]})}function zit({product:r,onBack:e}){const[t,a]=fe.useState("m15"),[n,i]=fe.useState(null),[o,s]=fe.useState(null),[l,u]=fe.useState(null),[f,v]=fe.useState(!0);fe.useEffect(()=>{v(!0),setTimeout(()=>{i(Iit(r.id,t)),s(Nit(r.id)),u(Pit(r.id)),v(!1)},300)},[r.id,t]);const d=r.change>=0,p=[{key:"m5",label:"5分钟"},{key:"m15",label:"15分钟"},{key:"m30",label:"30分钟"},{key:"m60",label:"60分钟"}],y={m5:"5分钟",m15:"15分钟",m30:"30分钟",m60:"60分钟"};return z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:118:5",className:"space-y-4",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:120:7",className:"flex items-center gap-4",children:[z.jsxs("button",{"code-path":"src/components/ProductDetail.tsx:121:9",onClick:e,className:"flex items-center gap-2 px-4 py-2 rounded-lg border border-[#27272a] bg-[#0d0d10] text-[#a1a1aa] hover:text-white hover:border-[#3f3f46] transition-colors",children:[z.jsx(QV,{"code-path":"src/components/ProductDetail.tsx:125:11",className:"w-4 h-4"}),z.jsx("span",{"code-path":"src/components/ProductDetail.tsx:126:11",children:"返回"})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:128:9",children:[z.jsxs("h2",{"code-path":"src/components/ProductDetail.tsx:129:11",className:"text-xl font-bold text-white",children:[r.name," (",r.code,")"]}),z.jsx("p",{"code-path":"src/components/ProductDetail.tsx:130:11",className:"text-sm text-[#71717a]",children:"详细技术分析"})]})]}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:135:7",className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:136:9",className:"flex flex-wrap items-center gap-6",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:137:11",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:138:13",className:`text-3xl font-bold font-mono ${d?"text-[#7dd75a]":"text-[#ef4444]"}`,children:["¥",r.price.toLocaleString()]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:141:13",className:`flex items-center gap-1 text-sm ${d?"text-[#7dd75a]":"text-[#ef4444]"}`,children:[d?z.jsx(Qs,{"code-path":"src/components/ProductDetail.tsx:142:23",className:"w-4 h-4"}):z.jsx(Do,{"code-path":"src/components/ProductDetail.tsx:142:60",className:"w-4 h-4"}),z.jsxs("span",{"code-path":"src/components/ProductDetail.tsx:143:15",children:[d?"+":"",r.change.toFixed(2)," (",d?"+":"",r.changePercent,"%)"]})]})]}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:147:11",className:"h-12 w-px bg-[#27272a] hidden sm:block"}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:149:11",className:"grid grid-cols-2 sm:grid-cols-4 gap-4",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:150:13",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:151:15",className:"text-xs text-[#71717a]",children:"开盘"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:152:15",className:"text-sm font-mono text-white",children:r.open.toLocaleString()})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:154:13",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:155:15",className:"text-xs text-[#71717a]",children:"最高"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:156:15",className:"text-sm font-mono text-[#7dd75a]",children:r.high.toLocaleString()})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:158:13",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:159:15",className:"text-xs text-[#71717a]",children:"最低"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:160:15",className:"text-sm font-mono text-[#ef4444]",children:r.low.toLocaleString()})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:162:13",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:163:15",className:"text-xs text-[#71717a]",children:"持仓量"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:164:15",className:"text-sm font-mono text-white",children:r.openInterest.toLocaleString()})]})]})]})}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:170:7",className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:172:9",className:"lg:col-span-2 space-y-4",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:174:11",className:"flex items-center gap-2",children:[z.jsx(jp,{"code-path":"src/components/ProductDetail.tsx:175:13",className:"w-4 h-4 text-[#7dd75a]"}),z.jsx("span",{"code-path":"src/components/ProductDetail.tsx:176:13",className:"text-sm text-[#a1a1aa]",children:"周期选择"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:177:13",className:"flex gap-2 ml-2",children:p.map(m=>z.jsx(Oit,{"code-path":"src/components/ProductDetail.tsx:179:17",label:m.label,isActive:t===m.key,onClick:()=>a(m.key)},m.key))})]}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:190:11",className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:f?z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:192:15",className:"h-[500px] flex items-center justify-center",children:z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:193:17",className:"flex items-center gap-2 text-[#7dd75a]",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:194:19",className:"w-5 h-5 border-2 border-[#7dd75a] border-t-transparent rounded-full animate-spin"}),z.jsx("span",{"code-path":"src/components/ProductDetail.tsx:195:19",children:"加载图表数据..."})]})}):n?z.jsx(Mit,{"code-path":"src/components/ProductDetail.tsx:199:15",klineData:n.klineData,macdData:n.macdData,resistance:n.keyLevels.resistance,support:n.keyLevels.support,height:500}):null})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:211:9",className:"space-y-4",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:213:11",className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:214:13",className:"flex items-center gap-2 mb-4",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:215:15",className:`p-2 rounded-lg ${l?.action==="long"?"bg-[#7dd75a]/10":l?.action==="short"?"bg-[#ef4444]/10":"bg-[#a1a1aa]/10"}`,children:z.jsx(ub,{"code-path":"src/components/ProductDetail.tsx:219:17",className:`w-4 h-4 ${l?.action==="long"?"text-[#7dd75a]":l?.action==="short"?"text-[#ef4444]":"text-[#a1a1aa]"}`})}),z.jsx("h3",{"code-path":"src/components/ProductDetail.tsx:224:15",className:"font-semibold text-white",children:"交易建议"})]}),l&&z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:228:15",className:"space-y-3",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:229:17",className:`p-3 rounded-lg ${l.action==="long"?"bg-[#7dd75a]/10 border border-[#7dd75a]/30":l.action==="short"?"bg-[#ef4444]/10 border border-[#ef4444]/30":"bg-[#a1a1aa]/10 border border-[#a1a1aa]/30"}`,children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:234:19",className:"text-xs text-[#71717a] mb-1",children:"操作建议"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:235:19",className:`text-lg font-bold ${l.action==="long"?"text-[#7dd75a]":l.action==="short"?"text-[#ef4444]":"text-[#a1a1aa]"}`,children:l.action==="long"?"逢低做多":l.action==="short"?"逢高做空":"观望等待"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:241:19",className:"text-xs text-[#a1a1aa] mt-1",children:l.reason})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:244:17",className:"grid grid-cols-2 gap-2",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:245:19",className:"p-2 rounded-lg bg-[#09090b]",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:246:21",className:"text-xs text-[#71717a]",children:"建议入场"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:247:21",className:"text-sm font-mono text-white",children:l.entryPrice.toLocaleString()})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:249:19",className:"p-2 rounded-lg bg-[#09090b]",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:250:21",className:"text-xs text-[#71717a]",children:"目标价位"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:251:21",className:"text-sm font-mono text-[#7dd75a]",children:l.targetPrice.toLocaleString()})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:253:19",className:"p-2 rounded-lg bg-[#09090b]",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:254:21",className:"text-xs text-[#71717a]",children:"止损价位"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:255:21",className:"text-sm font-mono text-[#ef4444]",children:l.stopLoss.toLocaleString()})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:257:19",className:"p-2 rounded-lg bg-[#09090b]",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:258:21",className:"text-xs text-[#71717a]",children:"风险等级"}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:259:21",className:`text-sm font-medium ${l.riskLevel==="low"?"text-[#7dd75a]":l.riskLevel==="medium"?"text-[#f59e0b]":"text-[#ef4444]"}`,children:l.riskLevel==="low"?"低":l.riskLevel==="medium"?"中":"高"})]})]})]})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:272:11",className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:273:13",className:"flex items-center gap-2 mb-4",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:274:15",className:"p-2 rounded-lg bg-[#60a5fa]/10",children:z.jsx(EN,{"code-path":"src/components/ProductDetail.tsx:275:17",className:"w-4 h-4 text-[#60a5fa]"})}),z.jsx("h3",{"code-path":"src/components/ProductDetail.tsx:277:15",className:"font-semibold text-white",children:"技术指标"})]}),o&&z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:281:15",className:"grid grid-cols-2 gap-2",children:[z.jsx(bp,{"code-path":"src/components/ProductDetail.tsx:282:17",title:"MACD",value:o.macd.signal==="golden_cross"?"金叉":o.macd.signal==="dead_cross"?"死叉":"中性",status:`DIF: ${o.macd.value}`,signal:o.macd.signal==="golden_cross"?"positive":o.macd.signal==="dead_cross"?"negative":"neutral"}),z.jsx(bp,{"code-path":"src/components/ProductDetail.tsx:288:17",title:"RSI",value:`${o.rsi.value}`,status:o.rsi.status==="overbought"?"超买":o.rsi.status==="oversold"?"超卖":"正常",signal:o.rsi.status==="oversold"?"positive":o.rsi.status==="overbought"?"negative":"neutral"}),z.jsx(bp,{"code-path":"src/components/ProductDetail.tsx:294:17",title:"布林带",value:o.bollinger.position==="upper"?"上轨":o.bollinger.position==="lower"?"下轨":"中轨",status:`区间: ${o.bollinger.lower.toFixed(0)}-${o.bollinger.upper.toFixed(0)}`,signal:o.bollinger.position==="lower"?"positive":o.bollinger.position==="upper"?"negative":"neutral"}),z.jsx(bp,{"code-path":"src/components/ProductDetail.tsx:300:17",title:"KDJ",value:o.kdj.signal==="golden_cross"?"金叉":o.kdj.signal==="dead_cross"?"死叉":"中性",status:`K: ${o.kdj.k} D: ${o.kdj.d}`,signal:o.kdj.signal==="golden_cross"?"positive":o.kdj.signal==="dead_cross"?"negative":"neutral"})]})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:311:11",className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:312:13",className:"flex items-center gap-2 mb-4",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:313:15",className:"p-2 rounded-lg bg-[#f59e0b]/10",children:z.jsx(Hg,{"code-path":"src/components/ProductDetail.tsx:314:17",className:"w-4 h-4 text-[#f59e0b]"})}),z.jsx("h3",{"code-path":"src/components/ProductDetail.tsx:316:15",className:"font-semibold text-white",children:"关键点位"})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:319:13",className:"space-y-1",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:320:15",className:"text-xs text-[#ef4444] font-medium mb-2",children:"压力位"}),r.keyLevels.resistance.map((m,_)=>z.jsx(CN,{"code-path":"src/components/ProductDetail.tsx:322:17",label:`压力 ${_+1}`,value:m,type:"resistance"},_))]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:326:13",className:"mt-4 space-y-1",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:327:15",className:"text-xs text-[#7dd75a] font-medium mb-2",children:"支撑位"}),r.keyLevels.support.map((m,_)=>z.jsx(CN,{"code-path":"src/components/ProductDetail.tsx:329:17",label:`支撑 ${_+1}`,value:m,type:"support"},_))]})]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:335:11",className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:336:13",className:"flex items-center gap-2 mb-4",children:[z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:337:15",className:"p-2 rounded-lg bg-[#c084fc]/10",children:z.jsx(PN,{"code-path":"src/components/ProductDetail.tsx:338:17",className:"w-4 h-4 text-[#c084fc]"})}),z.jsx("h3",{"code-path":"src/components/ProductDetail.tsx:340:15",className:"font-semibold text-white",children:"多周期一致性"})]}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:343:13",className:"space-y-2",children:Object.entries(r.cycles).map(([m,_])=>z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:345:17",className:"flex items-center justify-between py-1.5",children:[z.jsx("span",{"code-path":"src/components/ProductDetail.tsx:346:19",className:"text-sm text-[#a1a1aa]",children:y[m]}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:347:19",className:`flex items-center gap-1 px-2 py-1 rounded text-xs ${_==="up"?"bg-[#7dd75a]/10 text-[#7dd75a]":_==="down"?"bg-[#ef4444]/10 text-[#ef4444]":"bg-[#a1a1aa]/10 text-[#a1a1aa]"}`,children:[_==="up"?z.jsx(Qs,{"code-path":"src/components/ProductDetail.tsx:352:39",className:"w-3 h-3"}):_==="down"?z.jsx(Do,{"code-path":"src/components/ProductDetail.tsx:352:95",className:"w-3 h-3"}):z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:352:134",className:"w-3 h-0.5 bg-current"}),z.jsx("span",{"code-path":"src/components/ProductDetail.tsx:353:21",children:_==="up"?"上涨":_==="down"?"下跌":"震荡"})]})]},m))}),z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:359:13",className:"mt-4 pt-3 border-t border-[#27272a]",children:[z.jsxs("div",{"code-path":"src/components/ProductDetail.tsx:360:15",className:"flex items-center justify-between",children:[z.jsx("span",{"code-path":"src/components/ProductDetail.tsx:361:17",className:"text-sm text-[#a1a1aa]",children:"周期共振度"}),z.jsxs("span",{"code-path":"src/components/ProductDetail.tsx:362:17",className:`text-sm font-bold ${r.trendScore>=80?"text-[#7dd75a]":r.trendScore>=60?"text-[#f59e0b]":"text-[#ef4444]"}`,children:[r.trendScore,"%"]})]}),z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:366:15",className:"mt-2 h-2 bg-[#27272a] rounded-full overflow-hidden",children:z.jsx("div",{"code-path":"src/components/ProductDetail.tsx:367:17",className:`h-full rounded-full transition-all duration-500 ${r.trendScore>=80?"bg-[#7dd75a]":r.trendScore>=60?"bg-[#f59e0b]":"bg-[#ef4444]"}`,style:{width:`${r.trendScore}%`}})})]})]})]})]})]})}function kit({level:r}){const e={high:{text:"高风险",color:"text-[#ef4444]",bg:"bg-[#ef4444]/10",icon:_6},medium:{text:"中风险",color:"text-[#f59e0b]",bg:"bg-[#f59e0b]/10",icon:mx},low:{text:"低风险",color:"text-[#7dd75a]",bg:"bg-[#7dd75a]/10",icon:yx}},{text:t,color:a,bg:n,icon:i}=e[r];return z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:19:5",className:`flex items-center gap-1 px-2 py-1 rounded-md ${n}`,children:[z.jsx(i,{"code-path":"src/components/RiskAlerts.tsx:20:7",className:`w-3 h-3 ${a}`}),z.jsx("span",{"code-path":"src/components/RiskAlerts.tsx:21:7",className:`text-xs font-medium ${a}`,children:t})]})}function MN({alerts:r}){return r.length===0?z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:29:7",className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:[z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:30:9",className:"flex items-center gap-2 mb-4",children:[z.jsx("div",{"code-path":"src/components/RiskAlerts.tsx:31:11",className:"p-2 rounded-lg bg-[#7dd75a]/10",children:z.jsx(yx,{"code-path":"src/components/RiskAlerts.tsx:32:13",className:"w-4 h-4 text-[#7dd75a]"})}),z.jsx("h3",{"code-path":"src/components/RiskAlerts.tsx:34:11",className:"font-semibold text-white",children:"风险提醒"})]}),z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:36:9",className:"text-center py-6 text-[#71717a]",children:[z.jsx(yx,{"code-path":"src/components/RiskAlerts.tsx:37:11",className:"w-10 h-10 mx-auto mb-2 opacity-50"}),z.jsx("p",{"code-path":"src/components/RiskAlerts.tsx:38:11",className:"text-sm",children:"当前无重大风险事件"})]})]}):z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:45:5",className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:[z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:46:7",className:"flex items-center justify-between mb-4",children:[z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:47:9",className:"flex items-center gap-2",children:[z.jsx("div",{"code-path":"src/components/RiskAlerts.tsx:48:11",className:"p-2 rounded-lg bg-[#ef4444]/10",children:z.jsx(RN,{"code-path":"src/components/RiskAlerts.tsx:49:13",className:"w-4 h-4 text-[#ef4444]"})}),z.jsx("h3",{"code-path":"src/components/RiskAlerts.tsx:51:11",className:"font-semibold text-white",children:"风险提醒"})]}),z.jsxs("span",{"code-path":"src/components/RiskAlerts.tsx:53:9",className:"px-2 py-1 rounded-full bg-[#ef4444]/10 text-[#ef4444] text-xs font-medium",children:[r.length," 条"]})]}),z.jsx("div",{"code-path":"src/components/RiskAlerts.tsx:58:7",className:"space-y-3",children:r.map(e=>z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:60:11",className:"p-3 rounded-lg border border-[#27272a] bg-[#09090b] hover:border-[#ef4444]/30 transition-colors",children:[z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:64:13",className:"flex items-start justify-between gap-3 mb-2",children:[z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:65:15",className:"flex-1",children:[z.jsx("h4",{"code-path":"src/components/RiskAlerts.tsx:66:17",className:"text-sm font-medium text-white mb-1",children:e.title}),z.jsx("p",{"code-path":"src/components/RiskAlerts.tsx:67:17",className:"text-xs text-[#a1a1aa] line-clamp-2",children:e.description})]}),z.jsx(kit,{"code-path":"src/components/RiskAlerts.tsx:69:15",level:e.riskLevel})]}),z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:72:13",className:"flex items-center justify-between text-xs",children:[z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:73:15",className:"flex items-center gap-2",children:[z.jsx("span",{"code-path":"src/components/RiskAlerts.tsx:74:17",className:"text-[#71717a]",children:"影响品种:"}),z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:75:17",className:"flex gap-1",children:[e.affectedProducts.slice(0,2).map(t=>z.jsx("span",{"code-path":"src/components/RiskAlerts.tsx:77:21",className:"px-1.5 py-0.5 rounded bg-[#27272a] text-[#e6e6e6]",children:t},t)),e.affectedProducts.length>2&&z.jsxs("span",{"code-path":"src/components/RiskAlerts.tsx:82:21",className:"text-[#71717a]",children:["+",e.affectedProducts.length-2]})]})]}),z.jsx("span",{"code-path":"src/components/RiskAlerts.tsx:86:15",className:"text-[#71717a]",children:e.time})]}),z.jsx("div",{"code-path":"src/components/RiskAlerts.tsx:89:13",className:"mt-2 pt-2 border-t border-[#27272a]/50",children:z.jsxs("div",{"code-path":"src/components/RiskAlerts.tsx:90:15",className:"flex items-center gap-1 text-xs",children:[z.jsx(Do,{"code-path":"src/components/RiskAlerts.tsx:91:17",className:"w-3 h-3 text-[#f59e0b]"}),z.jsxs("span",{"code-path":"src/components/RiskAlerts.tsx:92:17",className:"text-[#f59e0b]",children:["建议: ",e.suggestion]})]})})]},e.id))})]})}const Bit=[{key:"all",label:"全部"},{key:"energy",label:"能源"},{key:"metal",label:"金属"},{key:"agriculture",label:"农产品"},{key:"financial",label:"金融"}],Vit=[{key:"successRate",label:"成功率"},{key:"trendScore",label:"趋势强度"},{key:"changePercent",label:"涨跌幅"}];function Git(){const[r,e]=fe.useState("overview"),[t,a]=fe.useState(null),[n,i]=fe.useState("grid"),[o,s]=fe.useState("all"),[l,u]=fe.useState("successRate"),[f,v]=fe.useState(""),d=Ly.filter(w=>!(o!=="all"&&w.category!==o||f&&!w.name.includes(f)&&!w.code.includes(f))).sort((w,A)=>l==="successRate"?A.successRate-w.successRate:l==="trendScore"?A.trendScore-w.trendScore:l==="changePercent"?A.changePercent-w.changePercent:0),[p,y]=fe.useState(!1);fe.useEffect(()=>{y(!0)},[]);const m=()=>z.jsxs("div",{"code-path":"src/App.tsx:84:5",className:`space-y-6 transition-all duration-500 ${p?"opacity-100 translate-y-0":"opacity-0 translate-y-4"}`,children:[z.jsxs("div",{"code-path":"src/App.tsx:85:7",className:"flex items-center justify-between",children:[z.jsx("h2",{"code-path":"src/App.tsx:86:9",className:"text-xl font-bold text-white",children:"市场概览"}),z.jsx("span",{"code-path":"src/App.tsx:87:9",className:"text-sm text-[#71717a]",children:"实时数据更新"})]}),z.jsx(N6,{"code-path":"src/App.tsx:90:7",data:Lit}),z.jsxs("div",{"code-path":"src/App.tsx:92:7",className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[z.jsx("div",{"code-path":"src/App.tsx:93:9",className:"lg:col-span-2",children:z.jsx(DC,{"code-path":"src/App.tsx:94:11",events:gx})}),z.jsx("div",{"code-path":"src/App.tsx:96:9",children:z.jsx(MN,{"code-path":"src/App.tsx:97:11",alerts:DN})})]})]}),_=()=>z.jsxs("div",{"code-path":"src/App.tsx:105:5",className:"space-y-6",children:[z.jsxs("div",{"code-path":"src/App.tsx:106:7",className:"flex items-center justify-between",children:[z.jsx("h2",{"code-path":"src/App.tsx:107:9",className:"text-xl font-bold text-white",children:"热点事件智能分析"}),z.jsxs("span",{"code-path":"src/App.tsx:108:9",className:"text-sm text-[#71717a]",children:["共 ",gx.length," 条事件"]})]}),z.jsx(DC,{"code-path":"src/App.tsx:110:7",events:gx})]}),S=()=>z.jsx("div",{"code-path":"src/App.tsx:116:5",className:"space-y-6",children:t?z.jsx(zit,{"code-path":"src/App.tsx:118:9",product:t,onBack:()=>a(null)}):z.jsxs(z.Fragment,{children:[z.jsxs("div",{"code-path":"src/App.tsx:125:11",className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10] space-y-4",children:[z.jsxs("div",{"code-path":"src/App.tsx:126:13",className:"flex flex-wrap items-center gap-4",children:[z.jsxs("div",{"code-path":"src/App.tsx:128:15",className:"relative flex-1 min-w-[200px]",children:[z.jsx(S6,{"code-path":"src/App.tsx:129:17",className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[#71717a]"}),z.jsx("input",{"code-path":"src/App.tsx:130:17",type:"text",placeholder:"搜索品种名称或代码...",value:f,onChange:w=>v(w.target.value),className:"w-full pl-10 pr-4 py-2 rounded-lg bg-[#09090b] border border-[#27272a] text-white text-sm placeholder:text-[#71717a] focus:outline-none focus:border-[#7dd75a] transition-colors"})]}),z.jsxs("div",{"code-path":"src/App.tsx:140:15",className:"flex items-center gap-1 p-1 rounded-lg bg-[#09090b] border border-[#27272a]",children:[z.jsx("button",{"code-path":"src/App.tsx:141:17",onClick:()=>i("grid"),className:`p-2 rounded-md transition-colors ${n==="grid"?"bg-[#7dd75a] text-[#09090b]":"text-[#a1a1aa] hover:text-white"}`,children:z.jsx(h6,{"code-path":"src/App.tsx:145:19",className:"w-4 h-4"})}),z.jsx("button",{"code-path":"src/App.tsx:147:17",onClick:()=>i("list"),className:`p-2 rounded-md transition-colors ${n==="list"?"bg-[#7dd75a] text-[#09090b]":"text-[#a1a1aa] hover:text-white"}`,children:z.jsx(d6,{"code-path":"src/App.tsx:151:19",className:"w-4 h-4"})})]})]}),z.jsxs("div",{"code-path":"src/App.tsx:156:13",className:"flex flex-wrap items-center gap-4",children:[z.jsxs("div",{"code-path":"src/App.tsx:158:15",className:"flex items-center gap-2",children:[z.jsx(c6,{"code-path":"src/App.tsx:159:17",className:"w-4 h-4 text-[#71717a]"}),z.jsx("span",{"code-path":"src/App.tsx:160:17",className:"text-sm text-[#a1a1aa]",children:"分类:"}),z.jsx("div",{"code-path":"src/App.tsx:161:17",className:"flex gap-1",children:Bit.map(w=>z.jsx("button",{"code-path":"src/App.tsx:163:21",onClick:()=>s(w.key),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${o===w.key?"bg-[#7dd75a] text-[#09090b] font-medium":"bg-[#09090b] text-[#a1a1aa] border border-[#27272a] hover:border-[#3f3f46]"}`,children:w.label},w.key))})]}),z.jsxs("div",{"code-path":"src/App.tsx:179:15",className:"flex items-center gap-2",children:[z.jsx("span",{"code-path":"src/App.tsx:180:17",className:"text-sm text-[#a1a1aa]",children:"排序:"}),z.jsx("select",{"code-path":"src/App.tsx:181:17",value:l,onChange:w=>u(w.target.value),className:"px-3 py-1.5 rounded-lg bg-[#09090b] border border-[#27272a] text-white text-sm focus:outline-none focus:border-[#7dd75a]",children:Vit.map(w=>z.jsx("option",{"code-path":"src/App.tsx:187:21",value:w.key,children:w.label},w.key))})]})]})]}),z.jsx("div",{"code-path":"src/App.tsx:197:11",className:"flex items-center justify-between",children:z.jsxs("div",{"code-path":"src/App.tsx:198:13",className:"flex items-center gap-4",children:[z.jsxs("span",{"code-path":"src/App.tsx:199:15",className:"text-sm text-[#a1a1aa]",children:["共 ",z.jsx("span",{"code-path":"src/App.tsx:200:19",className:"text-white font-medium",children:d.length})," 个品种"]}),z.jsxs("div",{"code-path":"src/App.tsx:202:15",className:"flex items-center gap-2 text-sm",children:[z.jsxs("span",{"code-path":"src/App.tsx:203:17",className:"flex items-center gap-1 text-[#7dd75a]",children:[z.jsx(Qs,{"code-path":"src/App.tsx:204:19",className:"w-3 h-3"}),d.filter(w=>w.change>=0).length]}),z.jsxs("span",{"code-path":"src/App.tsx:207:17",className:"flex items-center gap-1 text-[#ef4444]",children:[z.jsx(Do,{"code-path":"src/App.tsx:208:19",className:"w-3 h-3"}),d.filter(w=>w.change<0).length]})]})]})}),n==="grid"?z.jsx("div",{"code-path":"src/App.tsx:217:13",className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",children:d.map(w=>z.jsx(B6,{"code-path":"src/App.tsx:219:17",product:w,onClick:()=>a(w)},w.id))}):z.jsx("div",{"code-path":"src/App.tsx:227:13",className:"space-y-2",children:d.map(w=>z.jsx("div",{"code-path":"src/App.tsx:229:17",onClick:()=>a(w),className:"p-4 rounded-xl border border-[#27272a] bg-[#0d0d10] hover:border-[#7dd75a]/50 transition-all cursor-pointer",children:z.jsxs("div",{"code-path":"src/App.tsx:234:19",className:"flex items-center justify-between",children:[z.jsxs("div",{"code-path":"src/App.tsx:235:21",className:"flex items-center gap-4",children:[z.jsxs("div",{"code-path":"src/App.tsx:236:23",children:[z.jsx("div",{"code-path":"src/App.tsx:237:25",className:"font-medium text-white",children:w.name}),z.jsx("div",{"code-path":"src/App.tsx:238:25",className:"text-xs text-[#71717a]",children:w.code})]}),z.jsx("div",{"code-path":"src/App.tsx:240:23",className:"flex gap-2",children:Object.entries(w.cycles).map(([A,M])=>z.jsx("span",{"code-path":"src/App.tsx:242:27",className:`px-2 py-1 rounded text-xs ${M==="up"?"bg-[#7dd75a]/10 text-[#7dd75a]":M==="down"?"bg-[#ef4444]/10 text-[#ef4444]":"bg-[#a1a1aa]/10 text-[#a1a1aa]"}`,children:A==="m5"?"5分":A==="m15"?"15分":A==="m30"?"30分":"60分"},A))})]}),z.jsxs("div",{"code-path":"src/App.tsx:255:21",className:"text-right",children:[z.jsxs("div",{"code-path":"src/App.tsx:256:23",className:`font-mono font-medium ${w.change>=0?"text-[#7dd75a]":"text-[#ef4444]"}`,children:["¥",w.price.toLocaleString()]}),z.jsxs("div",{"code-path":"src/App.tsx:259:23",className:`text-sm ${w.change>=0?"text-[#7dd75a]":"text-[#ef4444]"}`,children:[w.change>=0?"+":"",w.changePercent,"%"]})]})]})},w.id))}),d.length===0&&z.jsxs("div",{"code-path":"src/App.tsx:270:13",className:"text-center py-12",children:[z.jsx("div",{"code-path":"src/App.tsx:271:15",className:"text-[#71717a] mb-2",children:"未找到匹配的品种"}),z.jsx("button",{"code-path":"src/App.tsx:272:15",onClick:()=>{s("all"),v("")},className:"text-[#7dd75a] hover:underline",children:"清除筛选条件"})]})]})}),b=()=>z.jsxs("div",{"code-path":"src/App.tsx:290:5",className:"space-y-6",children:[z.jsxs("div",{"code-path":"src/App.tsx:291:7",className:"flex items-center justify-between",children:[z.jsx("h2",{"code-path":"src/App.tsx:292:9",className:"text-xl font-bold text-white",children:"风险提醒"}),z.jsx("span",{"code-path":"src/App.tsx:293:9",className:"text-sm text-[#71717a]",children:"实时监控"})]}),z.jsxs("div",{"code-path":"src/App.tsx:296:7",className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[z.jsx(MN,{"code-path":"src/App.tsx:297:9",alerts:DN}),z.jsxs("div",{"code-path":"src/App.tsx:299:9",className:"p-6 rounded-xl border border-[#27272a] bg-[#0d0d10]",children:[z.jsx("h3",{"code-path":"src/App.tsx:300:11",className:"font-semibold text-white mb-4",children:"风险控制建议"}),z.jsxs("div",{"code-path":"src/App.tsx:301:11",className:"space-y-4",children:[z.jsxs("div",{"code-path":"src/App.tsx:302:13",className:"p-4 rounded-lg bg-[#ef4444]/5 border border-[#ef4444]/20",children:[z.jsxs("div",{"code-path":"src/App.tsx:303:15",className:"flex items-center gap-2 mb-2",children:[z.jsx("div",{"code-path":"src/App.tsx:304:17",className:"w-2 h-2 rounded-full bg-[#ef4444]"}),z.jsx("span",{"code-path":"src/App.tsx:305:17",className:"font-medium text-white",children:"高风险环境"})]}),z.jsx("p",{"code-path":"src/App.tsx:307:15",className:"text-sm text-[#a1a1aa]",children:"当前地缘政治风险急剧升温,建议控制仓位在30%以下,设置严格止损。"})]}),z.jsxs("div",{"code-path":"src/App.tsx:312:13",className:"p-4 rounded-lg bg-[#f59e0b]/5 border border-[#f59e0b]/20",children:[z.jsxs("div",{"code-path":"src/App.tsx:313:15",className:"flex items-center gap-2 mb-2",children:[z.jsx("div",{"code-path":"src/App.tsx:314:17",className:"w-2 h-2 rounded-full bg-[#f59e0b]"}),z.jsx("span",{"code-path":"src/App.tsx:315:17",className:"font-medium text-white",children:"持仓管理"})]}),z.jsx("p",{"code-path":"src/App.tsx:317:15",className:"text-sm text-[#a1a1aa]",children:"避免隔夜重仓,特别是原油、黄金等波动较大的品种。建议日内交易为主。"})]}),z.jsxs("div",{"code-path":"src/App.tsx:322:13",className:"p-4 rounded-lg bg-[#7dd75a]/5 border border-[#7dd75a]/20",children:[z.jsxs("div",{"code-path":"src/App.tsx:323:15",className:"flex items-center gap-2 mb-2",children:[z.jsx("div",{"code-path":"src/App.tsx:324:17",className:"w-2 h-2 rounded-full bg-[#7dd75a]"}),z.jsx("span",{"code-path":"src/App.tsx:325:17",className:"font-medium text-white",children:"机会提示"})]}),z.jsx("p",{"code-path":"src/App.tsx:327:15",className:"text-sm text-[#a1a1aa]",children:"黄金、原油趋势明确,可关注回调后的做多机会。严格设置止损。"})]})]})]})]})]});return z.jsxs("div",{"code-path":"src/App.tsx:338:5",className:"min-h-screen bg-[#09090b]",children:[z.jsx(E6,{"code-path":"src/App.tsx:339:7",activeTab:r,onTabChange:e}),z.jsx("main",{"code-path":"src/App.tsx:341:7",className:"pt-20 pb-8 px-4 sm:px-6 lg:px-8",children:z.jsxs("div",{"code-path":"src/App.tsx:342:9",className:"max-w-7xl mx-auto",children:[r==="overview"&&m(),r==="events"&&_(),r==="products"&&S(),r==="risks"&&b()]})})]})}jV.createRoot(document.getElementById("root")).render(z.jsx(fe.StrictMode,{"code-path":"src/main.tsx:7:3",children:z.jsx(Git,{"code-path":"src/main.tsx:8:5"})})); diff --git a/app/dist/index.html b/app/dist/index.html new file mode 100644 index 0000000..10e4e81 --- /dev/null +++ b/app/dist/index.html @@ -0,0 +1,13 @@ + + + + + + 智能期货期权分析系统 + + + + +
+ + diff --git a/app/eslint.config.js b/app/eslint.config.js new file mode 100644 index 0000000..5e6b472 --- /dev/null +++ b/app/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..b7e1222 --- /dev/null +++ b/app/index.html @@ -0,0 +1,12 @@ + + + + + + 智能期货期权分析系统 + + +
+ + + diff --git a/app/info.md b/app/info.md new file mode 100644 index 0000000..bb94924 --- /dev/null +++ b/app/info.md @@ -0,0 +1,31 @@ +Using Node.js 20, Tailwind CSS v3.4.19, and Vite v7.2.4 + +Tailwind CSS has been set up with the shadcn theme + +Setup complete: /mnt/okcomputer/output/app + +Components (40+): + accordion, alert-dialog, alert, aspect-ratio, avatar, badge, breadcrumb, + button-group, button, calendar, card, carousel, chart, checkbox, collapsible, + command, context-menu, dialog, drawer, dropdown-menu, empty, field, form, + hover-card, input-group, input-otp, input, item, kbd, label, menubar, + navigation-menu, pagination, popover, progress, radio-group, resizable, + scroll-area, select, separator, sheet, sidebar, skeleton, slider, sonner, + spinner, switch, table, tabs, textarea, toggle-group, toggle, tooltip + +Usage: + import { Button } from '@/components/ui/button' + import { Card, CardHeader, CardTitle } from '@/components/ui/card' + +Structure: + src/sections/ Page sections + src/hooks/ Custom hooks + src/types/ Type definitions + src/App.css Styles specific to the Webapp + src/App.tsx Root React component + src/index.css Global styles + src/main.tsx Entry point for rendering the Webapp + index.html Entry point for the Webapp + tailwind.config.js Configures Tailwind's theme, plugins, etc. + vite.config.ts Main build and dev server settings for Vite + postcss.config.js Config file for CSS post-processing tools \ No newline at end of file diff --git a/app/nginx.conf b/app/nginx.conf new file mode 100644 index 0000000..5e63532 --- /dev/null +++ b/app/nginx.conf @@ -0,0 +1,59 @@ +server { + listen 80; + server_name localhost; + root /usr/share/nginx/html; + index index.html; + + # Gzip压缩 + gzip on; + gzip_vary on; + gzip_min_length 1024; + gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json; + + # 缓存静态资源 + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + add_header X-Content-Type-Options "nosniff"; + } + + # API代理 + location /api/ { + proxy_pass http://backend:3000/api/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_cache_bypass $http_upgrade; + proxy_read_timeout 86400; + } + + # WebSocket代理 + location /socket.io/ { + proxy_pass http://backend:3000/socket.io/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_read_timeout 86400; + } + + # 前端路由 + location / { + try_files $uri $uri/ /index.html; + add_header Cache-Control "no-cache"; + } + + # 健康检查 + location /health { + access_log off; + return 200 "healthy\n"; + add_header Content-Type text/plain; + } +} diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 0000000..99e1dbe --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,8264 @@ +{ + "name": "my-app", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "my-app", + "version": "0.0.0", + "dependencies": { + "@hookform/resolvers": "^5.2.2", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", + "@radix-ui/react-aspect-ratio": "^1.1.8", + "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-menubar": "^1.1.16", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "echarts": "^5.4.3", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.562.0", + "next-themes": "^0.4.6", + "react": "^19.2.0", + "react-day-picker": "^9.13.0", + "react-dom": "^19.2.0", + "react-hook-form": "^7.70.0", + "react-resizable-panels": "^4.2.2", + "recharts": "^2.15.4", + "sonner": "^2.0.7", + "tailwind-merge": "^3.4.0", + "vaul": "^1.1.2", + "zod": "^4.3.5" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "autoprefixer": "^10.4.23", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "kimi-plugin-inspect-react": "^1.0.3", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.19", + "tailwindcss-animate": "^1.0.7", + "tw-animate-css": "^1.4.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz", + "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.0.tgz", + "integrity": "sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-decorators": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.28.6.tgz", + "integrity": "sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-jsx": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", + "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.28.0", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@hookform/resolvers": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.2.tgz", + "integrity": "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.8.tgz", + "integrity": "sha512-5nZrJTF7gH+e0nZS7/QxFz6tJV4VimhQb1avEgtsJxvvIp5JilL+c58HICsKzPxghdwaDt48hEfPM1au4zGy+w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.11.tgz", + "integrity": "sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", + "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context-menu": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", + "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", + "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menubar": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", + "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", + "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.8.tgz", + "integrity": "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", + "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", + "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz", + "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.52.0.tgz", + "integrity": "sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/type-utils": "8.52.0", + "@typescript-eslint/utils": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.52.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz", + "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.52.0.tgz", + "integrity": "sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.52.0", + "@typescript-eslint/types": "^8.52.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz", + "integrity": "sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz", + "integrity": "sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.52.0.tgz", + "integrity": "sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.52.0.tgz", + "integrity": "sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz", + "integrity": "sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.52.0", + "@typescript-eslint/tsconfig-utils": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.52.0.tgz", + "integrity": "sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz", + "integrity": "sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.52.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", + "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.53", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.6", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.4" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" + }, + "node_modules/embla-carousel-react": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", + "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", + "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-equals": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", + "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/input-otp": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", + "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kimi-plugin-inspect-react": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/kimi-plugin-inspect-react/-/kimi-plugin-inspect-react-1.0.3.tgz", + "integrity": "sha512-dU0dYaFYvczJZWwsyAVQ2No2NTaycd93zk3zrbLj9IPwdZaLBK4d0cESz88lVju3rQuFiwRXYNDaCnbPxn4JcQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/preset-env": "^7.23.0", + "@babel/preset-react": "^7.23.0", + "@babel/preset-typescript": "^7.23.0", + "@babel/types": "^7.23.0", + "magic-string": "^0.30.0" + }, + "peerDependencies": { + "vite": "^7.2.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-day-picker": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.13.0.tgz", + "integrity": "sha512-euzj5Hlq+lOHqI53NiuNhCP8HWgsPf/bBAVijR50hNaY1XwjKjShAnIe8jm8RD2W9IJUvihDIZ+KrmqfFzNhFQ==", + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "date-fns": "^4.1.0", + "date-fns-jalali": "^4.1.0-0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "node_modules/react-hook-form": { + "version": "7.70.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.70.0.tgz", + "integrity": "sha512-COOMajS4FI3Wuwrs3GPpi/Jeef/5W1DRR84Yl5/ShlT3dKVFUfoGiEZ/QE6Uw8P4T2/CLJdcTVYKvWBMQTEpvw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-resizable-panels": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-4.2.2.tgz", + "integrity": "sha512-BxDTFHxDCyCRPK54X5hpnhoLZbBslUrTTelQDRHo4107FXODjPSTqEWOPlFxE/ho0Vw4JrsRgaWdx6GIK073XA==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/recharts": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.55.1", + "@rollup/rollup-android-arm64": "4.55.1", + "@rollup/rollup-darwin-arm64": "4.55.1", + "@rollup/rollup-darwin-x64": "4.55.1", + "@rollup/rollup-freebsd-arm64": "4.55.1", + "@rollup/rollup-freebsd-x64": "4.55.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", + "@rollup/rollup-linux-arm64-gnu": "4.55.1", + "@rollup/rollup-linux-arm64-musl": "4.55.1", + "@rollup/rollup-linux-loong64-gnu": "4.55.1", + "@rollup/rollup-linux-loong64-musl": "4.55.1", + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", + "@rollup/rollup-linux-ppc64-musl": "4.55.1", + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", + "@rollup/rollup-linux-riscv64-musl": "4.55.1", + "@rollup/rollup-linux-s390x-gnu": "4.55.1", + "@rollup/rollup-linux-x64-gnu": "4.55.1", + "@rollup/rollup-linux-x64-musl": "4.55.1", + "@rollup/rollup-openbsd-x64": "4.55.1", + "@rollup/rollup-openharmony-arm64": "4.55.1", + "@rollup/rollup-win32-arm64-msvc": "4.55.1", + "@rollup/rollup-win32-ia32-msvc": "4.55.1", + "@rollup/rollup-win32-x64-gnu": "4.55.1", + "@rollup/rollup-win32-x64-msvc": "4.55.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sonner": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", + "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.52.0.tgz", + "integrity": "sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.52.0", + "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vaul": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", + "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, + "node_modules/zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + } + } +} diff --git a/app/package.json b/app/package.json new file mode 100644 index 0000000..9ec20d4 --- /dev/null +++ b/app/package.json @@ -0,0 +1,82 @@ +{ + "name": "my-app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@hookform/resolvers": "^5.2.2", + "axios": "^1.6.5", + "socket.io-client": "^4.7.4", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", + "@radix-ui/react-aspect-ratio": "^1.1.8", + "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-menubar": "^1.1.16", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "echarts": "^5.4.3", + "embla-carousel-react": "^8.6.0", + "input-otp": "^1.4.2", + "lucide-react": "^0.562.0", + "next-themes": "^0.4.6", + "react": "^19.2.0", + "react-day-picker": "^9.13.0", + "react-dom": "^19.2.0", + "react-hook-form": "^7.70.0", + "react-resizable-panels": "^4.2.2", + "recharts": "^2.15.4", + "sonner": "^2.0.7", + "tailwind-merge": "^3.4.0", + "vaul": "^1.1.2", + "zod": "^4.3.5" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "autoprefixer": "^10.4.23", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "kimi-plugin-inspect-react": "^1.0.3", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.19", + "tailwindcss-animate": "^1.0.7", + "tw-animate-css": "^1.4.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } +} diff --git a/app/postcss.config.js b/app/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/app/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/app/server/.env b/app/server/.env new file mode 100644 index 0000000..6981d47 --- /dev/null +++ b/app/server/.env @@ -0,0 +1,47 @@ +# 应用配置 +NODE_ENV=development +PORT=3000 +API_PREFIX=/api/v1 + +# 数据库配置 +DATABASE_URL=postgresql://user:password@localhost:5432/futures_analysis?schema=public + +# Redis配置 +REDIS_URL=redis://localhost:6379 +REDIS_PASSWORD= + +# JWT配置 +JWT_SECRET=your-super-secret-jwt-key-change-this-in-production +JWT_EXPIRES_IN=1h +JWT_REFRESH_EXPIRES_IN=7d + +# 行情数据源配置 +MARKET_DATA_PROVIDER=mock +MARKET_DATA_API_KEY= +MARKET_DATA_API_SECRET= +MARKET_DATA_WS_URL= + +# OpenAI配置 (用于AI分析) +OPENAI_API_KEY= +OPENAI_BASE_URL= +OPENAI_MODEL=gpt-4-turbo-preview + +# 邮件配置 +SMTP_HOST= +SMTP_PORT=587 +SMTP_USER= +SMTP_PASS= +SMTP_FROM= + +# 日志配置 +LOG_LEVEL=debug +LOG_FILE=logs/app.log + +# 安全配置 +CORS_ORIGIN=http://localhost:5173 +RATE_LIMIT_WINDOW_MS=60000 +RATE_LIMIT_MAX_REQUESTS=100 + +# 监控配置 +METRICS_ENABLED=true +METRICS_PORT=9090 diff --git a/app/server/.env.example b/app/server/.env.example new file mode 100644 index 0000000..6981d47 --- /dev/null +++ b/app/server/.env.example @@ -0,0 +1,47 @@ +# 应用配置 +NODE_ENV=development +PORT=3000 +API_PREFIX=/api/v1 + +# 数据库配置 +DATABASE_URL=postgresql://user:password@localhost:5432/futures_analysis?schema=public + +# Redis配置 +REDIS_URL=redis://localhost:6379 +REDIS_PASSWORD= + +# JWT配置 +JWT_SECRET=your-super-secret-jwt-key-change-this-in-production +JWT_EXPIRES_IN=1h +JWT_REFRESH_EXPIRES_IN=7d + +# 行情数据源配置 +MARKET_DATA_PROVIDER=mock +MARKET_DATA_API_KEY= +MARKET_DATA_API_SECRET= +MARKET_DATA_WS_URL= + +# OpenAI配置 (用于AI分析) +OPENAI_API_KEY= +OPENAI_BASE_URL= +OPENAI_MODEL=gpt-4-turbo-preview + +# 邮件配置 +SMTP_HOST= +SMTP_PORT=587 +SMTP_USER= +SMTP_PASS= +SMTP_FROM= + +# 日志配置 +LOG_LEVEL=debug +LOG_FILE=logs/app.log + +# 安全配置 +CORS_ORIGIN=http://localhost:5173 +RATE_LIMIT_WINDOW_MS=60000 +RATE_LIMIT_MAX_REQUESTS=100 + +# 监控配置 +METRICS_ENABLED=true +METRICS_PORT=9090 diff --git a/app/server/Dockerfile b/app/server/Dockerfile new file mode 100644 index 0000000..58ee488 --- /dev/null +++ b/app/server/Dockerfile @@ -0,0 +1,44 @@ +# 构建阶段 +FROM node:20-alpine AS builder + +WORKDIR /app + +# 复制package文件 +COPY package*.json ./ +COPY prisma ./prisma/ + +# 安装依赖 +RUN npm install + +# 复制源代码 +COPY . . + +# 生成Prisma客户端 +RUN npx prisma generate + +# 构建应用 +RUN npm run build + +# 生产阶段 +FROM node:20-alpine + +WORKDIR /app + +# 安装生产依赖和必要库 +COPY package*.json ./ +RUN npm install --omit=dev && npm cache clean --force + +# 复制构建产物 +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma +COPY --from=builder /app/prisma ./prisma + +# 暴露端口 +EXPOSE 3000 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD node -e "require('http').get('http://localhost:3000/api/v1/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" + +# 启动命令 - 先安装openssl再启动 +CMD ["sh", "-c", "apk add --no-cache openssl1.1-compat 2>/dev/null || apk add --no-cache openssl; node dist/src/main.js"] diff --git a/app/server/nest-cli.json b/app/server/nest-cli.json new file mode 100644 index 0000000..2dcd07c --- /dev/null +++ b/app/server/nest-cli.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "deleteOutDir": true, + "webpack": false + } +} diff --git a/app/server/package.json b/app/server/package.json new file mode 100644 index 0000000..c99d382 --- /dev/null +++ b/app/server/package.json @@ -0,0 +1,103 @@ +{ + "name": "futures-analysis-server", + "version": "1.0.0", + "description": "智能期货期权分析系统 - 后端服务", + "author": "AlphaFutures Team", + "private": true, + "license": "MIT", + "scripts": { + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json", + "db:generate": "prisma generate", + "db:migrate": "prisma migrate dev", + "db:deploy": "prisma migrate deploy", + "db:studio": "prisma studio", + "db:seed": "ts-node prisma/seed.ts" + }, + "dependencies": { + "@nestjs/common": "^10.3.0", + "@nestjs/config": "^3.1.1", + "@nestjs/core": "^10.3.0", + "@nestjs/jwt": "^10.2.0", + "@nestjs/passport": "^10.0.3", + "@nestjs/platform-express": "^10.3.0", + "@nestjs/platform-socket.io": "^10.3.0", + "@nestjs/schedule": "^4.0.0", + "@nestjs/swagger": "^7.3.0", + "@nestjs/throttler": "^5.1.1", + "@nestjs/websockets": "^10.3.0", + "@prisma/client": "^5.9.0", + "bcrypt": "^5.1.1", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "compression": "^1.7.4", + "helmet": "^7.1.0", + "ioredis": "^5.3.2", + "openai": "^4.28.0", + "passport": "^0.7.0", + "passport-jwt": "^4.0.1", + "reflect-metadata": "^0.2.1", + "rxjs": "^7.8.1", + "uuid": "^9.0.1", + "ws": "^8.16.0" + }, + "devDependencies": { + "@nestjs/cli": "^10.3.0", + "@nestjs/schematics": "^10.1.0", + "@nestjs/testing": "^10.3.0", + "@types/bcrypt": "^5.0.2", + "@types/compression": "^1.7.5", + "@types/express": "^4.17.21", + "@types/jest": "^29.5.11", + "@types/node": "^20.11.5", + "@types/passport-jwt": "^4.0.0", + "@types/supertest": "^6.0.2", + "@types/uuid": "^9.0.7", + "@types/ws": "^8.5.10", + "@typescript-eslint/eslint-plugin": "^6.19.1", + "@typescript-eslint/parser": "^6.19.1", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "jest": "^29.7.0", + "prettier": "^3.2.4", + "prisma": "^5.9.0", + "source-map-support": "^0.5.21", + "supertest": "^6.3.4", + "ts-jest": "^29.1.1", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.3.3" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + }, + "engines": { + "node": ">=18.0.0" + } +} diff --git a/app/server/prisma/schema.prisma b/app/server/prisma/schema.prisma new file mode 100644 index 0000000..aa7a9b2 --- /dev/null +++ b/app/server/prisma/schema.prisma @@ -0,0 +1,265 @@ +generator client { + provider = "prisma-client-js" + binaryTargets = ["native", "linux-musl-openssl-3.0.x"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +// 用户表 +model User { + id Int @id @default(autoincrement()) + username String @unique @db.VarChar(50) + email String @unique @db.VarChar(100) + passwordHash String @map("password_hash") @db.VarChar(255) + phone String? @db.VarChar(20) + avatarUrl String? @map("avatar_url") @db.VarChar(255) + membershipLevel Int @default(0) @map("membership_level") + isActive Boolean @default(true) @map("is_active") + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @updatedAt @map("updated_at") + + // 关联 + watchlist Watchlist[] + priceAlerts PriceAlert[] + paperTrades PaperTrade[] + sessions UserSession[] + + @@map("users") +} + +// 用户会话表 +model UserSession { + id Int @id @default(autoincrement()) + userId Int @map("user_id") + token String @unique @db.VarChar(500) + expiresAt DateTime @map("expires_at") + createdAt DateTime @default(now()) @map("created_at") + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@index([token]) + @@map("user_sessions") +} + +// 期货品种表 +model Product { + id Int @id @default(autoincrement()) + symbol String @unique @db.VarChar(20) + name String @db.VarChar(100) + category String @db.VarChar(50) + exchange String? @db.VarChar(50) + unit String? @db.VarChar(20) + minChange Decimal? @map("min_change") @db.Decimal(10, 4) + description String? @db.Text + isActive Boolean @default(true) @map("is_active") + createdAt DateTime @default(now()) @map("created_at") + + // 关联 + klineData KlineData[] + tickData TickData[] + events EventProduct[] + signals TradingSignal[] + options OptionContract[] + + @@map("products") +} + +// K线数据表 +model KlineData { + id Int @id @default(autoincrement()) + productId Int @map("product_id") + period String @db.VarChar(10) // 1m, 5m, 15m, 30m, 1h, 1d, 1w + time DateTime + open Decimal @db.Decimal(18, 6) + high Decimal @db.Decimal(18, 6) + low Decimal @db.Decimal(18, 6) + close Decimal @db.Decimal(18, 6) + volume BigInt + openInterest BigInt? @map("open_interest") + createdAt DateTime @default(now()) @map("created_at") + + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + + @@unique([productId, period, time]) + @@index([productId, period, time]) + @@map("kline_data") +} + +// Tick实时数据表 +model TickData { + id Int @id @default(autoincrement()) + productId Int @map("product_id") + price Decimal @db.Decimal(18, 6) + change Decimal @db.Decimal(18, 6) + changePercent Decimal @map("change_percent") @db.Decimal(10, 4) + open Decimal @db.Decimal(18, 6) + high Decimal @db.Decimal(18, 6) + low Decimal @db.Decimal(18, 6) + volume BigInt + openInterest BigInt? @map("open_interest") + bidPrice Decimal? @map("bid_price") @db.Decimal(18, 6) + askPrice Decimal? @map("ask_price") @db.Decimal(18, 6) + bidVolume BigInt? @map("bid_volume") + askVolume BigInt? @map("ask_volume") + timestamp DateTime + createdAt DateTime @default(now()) @map("created_at") + + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + + @@index([productId, timestamp]) + @@map("tick_data") +} + +// 自选股表 +model Watchlist { + id Int @id @default(autoincrement()) + userId Int @map("user_id") + symbol String @db.VarChar(20) + alertPrice Decimal? @map("alert_price") @db.Decimal(18, 6) + createdAt DateTime @default(now()) @map("created_at") + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@unique([userId, symbol]) + @@index([userId]) + @@map("watchlist") +} + +// 价格预警表 +model PriceAlert { + id Int @id @default(autoincrement()) + userId Int @map("user_id") + symbol String @db.VarChar(20) + alertType String @map("alert_type") @db.VarChar(20) // above, below + alertPrice Decimal @map("alert_price") @db.Decimal(18, 6) + isActive Boolean @default(true) @map("is_active") + triggeredAt DateTime? @map("triggered_at") + createdAt DateTime @default(now()) @map("created_at") + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@index([userId]) + @@index([symbol, isActive]) + @@map("price_alerts") +} + +// 热点事件表 +model HotEvent { + id Int @id @default(autoincrement()) + title String @db.VarChar(255) + content String? @db.Text + summary String? @db.Text + impact String @db.VarChar(20) // bullish, bearish, neutral + impactLevel Int @map("impact_level") + source String? @db.VarChar(100) + analysis String? @db.Text + risks String[] @db.VarChar(255) + eventTime DateTime? @map("event_time") + createdAt DateTime @default(now()) @map("created_at") + + // 关联 + affectedProducts EventProduct[] + + @@map("hot_events") +} + +// 事件影响品种关联表 +model EventProduct { + id Int @id @default(autoincrement()) + eventId Int @map("event_id") + productId Int @map("product_id") + impactConfidence Decimal? @map("impact_confidence") @db.Decimal(3, 2) + + event HotEvent @relation(fields: [eventId], references: [id], onDelete: Cascade) + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + + @@unique([eventId, productId]) + @@map("event_products") +} + +// 交易信号表 +model TradingSignal { + id Int @id @default(autoincrement()) + productId Int @map("product_id") + timeframe String @db.VarChar(10) + signalType String @map("signal_type") @db.VarChar(20) // buy, sell, neutral + strength Int + indicators Json? // 触发信号的指标 + description String? @db.Text + entryPrice Decimal? @map("entry_price") @db.Decimal(18, 6) + stopLoss Decimal? @map("stop_loss") @db.Decimal(18, 6) + targetPrice Decimal? @map("target_price") @db.Decimal(18, 6) + isActive Boolean @default(true) @map("is_active") + createdAt DateTime @default(now()) @map("created_at") + + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + + @@index([productId, timeframe, createdAt]) + @@map("trading_signals") +} + +// 期权合约表 +model OptionContract { + id Int @id @default(autoincrement()) + productId Int @map("product_id") + symbol String @db.VarChar(20) + type String @db.VarChar(10) // call, put + strikePrice Decimal @map("strike_price") @db.Decimal(18, 6) + expiryDate DateTime @map("expiry_date") + price Decimal? @db.Decimal(18, 6) + iv Decimal? @db.Decimal(10, 4) // 隐含波动率 + delta Decimal? @db.Decimal(10, 4) + gamma Decimal? @db.Decimal(10, 4) + theta Decimal? @db.Decimal(10, 4) + vega Decimal? @db.Decimal(10, 4) + rho Decimal? @db.Decimal(10, 4) + volume BigInt? + openInterest BigInt? @map("open_interest") + updatedAt DateTime @updatedAt @map("updated_at") + createdAt DateTime @default(now()) @map("created_at") + + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + + @@unique([productId, type, strikePrice, expiryDate]) + @@index([productId, expiryDate]) + @@map("option_contracts") +} + +// 模拟交易记录表 +model PaperTrade { + id Int @id @default(autoincrement()) + userId Int @map("user_id") + symbol String @db.VarChar(20) + direction String @db.VarChar(10) // long, short + entryPrice Decimal @map("entry_price") @db.Decimal(18, 6) + exitPrice Decimal? @map("exit_price") @db.Decimal(18, 6) + quantity Int + entryTime DateTime @default(now()) @map("entry_time") + exitTime DateTime? @map("exit_time") + pnl Decimal? @db.Decimal(18, 6) + pnlPercent Decimal? @map("pnl_percent") @db.Decimal(10, 4) + status String @default("open") @db.VarChar(20) // open, closed + notes String? @db.Text + createdAt DateTime @default(now()) @map("created_at") + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@index([userId]) + @@index([userId, status]) + @@map("paper_trades") +} + +// 系统配置表 +model SystemConfig { + id Int @id @default(autoincrement()) + key String @unique @db.VarChar(100) + value String @db.Text + description String? @db.Text + updatedAt DateTime @updatedAt @map("updated_at") + createdAt DateTime @default(now()) @map("created_at") + + @@map("system_configs") +} diff --git a/app/server/prisma/seed.ts b/app/server/prisma/seed.ts new file mode 100644 index 0000000..435142c --- /dev/null +++ b/app/server/prisma/seed.ts @@ -0,0 +1,150 @@ +import { PrismaClient } from '@prisma/client'; + +const prisma = new PrismaClient(); + +async function main() { + console.log('🌱 开始种子数据...'); + + // 创建期货品种 + const products = [ + { symbol: 'SC', name: '原油', category: 'energy', exchange: 'INE', unit: '元/桶', minChange: 0.1 }, + { symbol: 'AU', name: '黄金', category: 'metal', exchange: 'SHFE', unit: '元/克', minChange: 0.02 }, + { symbol: 'CU', name: '铜', category: 'metal', exchange: 'SHFE', unit: '元/吨', minChange: 10 }, + { symbol: 'AG', name: '白银', category: 'metal', exchange: 'SHFE', unit: '元/千克', minChange: 1 }, + { symbol: 'I', name: '铁矿石', category: 'metal', exchange: 'DCE', unit: '元/吨', minChange: 0.5 }, + { symbol: 'M', name: '豆粕', category: 'agriculture', exchange: 'DCE', unit: '元/吨', minChange: 1 }, + { symbol: 'P', name: '棕榈油', category: 'agriculture', exchange: 'DCE', unit: '元/吨', minChange: 2 }, + { symbol: 'EC', name: '集运指数', category: 'financial', exchange: 'INE', unit: '点', minChange: 0.1 }, + { symbol: 'RB', name: '螺纹钢', category: 'metal', exchange: 'SHFE', unit: '元/吨', minChange: 1 }, + { symbol: 'FG', name: '玻璃', category: 'industrial', exchange: 'ZCE', unit: '元/吨', minChange: 1 }, + { symbol: 'SA', name: '纯碱', category: 'industrial', exchange: 'ZCE', unit: '元/吨', minChange: 1 }, + { symbol: 'MA', name: '甲醇', category: 'energy', exchange: 'ZCE', unit: '元/吨', minChange: 1 }, + { symbol: 'TA', name: 'PTA', category: 'industrial', exchange: 'ZCE', unit: '元/吨', minChange: 2 }, + { symbol: 'CF', name: '棉花', category: 'agriculture', exchange: 'ZCE', unit: '元/吨', minChange: 5 }, + { symbol: 'SR', name: '白糖', category: 'agriculture', exchange: 'ZCE', unit: '元/吨', minChange: 1 }, + ]; + + for (const product of products) { + await prisma.product.upsert({ + where: { symbol: product.symbol }, + update: product, + create: product, + }); + } + + console.log(`✅ 已创建 ${products.length} 个期货品种`); + + // 创建热点事件 + const events = [ + { + title: '地缘政治风险升级', + summary: '美以袭伊朗,"海上油阀"被关,中东局势紧张升级', + content: '详细内容...', + impact: 'bullish', + impactLevel: 5, + analysis: '地缘政治风险急剧升温,霍尔木兹海峡封锁风险上升。原油供应中断担忧推动油价上涨,避险资产黄金、白银同步走强。短期油价易涨难跌,建议关注原油、黄金相关品种做多机会。', + risks: ['冲突升级可能', '供应中断风险', '波动率激增'], + affectedSymbols: ['SC', 'AU', 'AG'], + }, + { + title: '黄金价格创历史新高', + summary: 'COMEX黄金突破3100美元关口,避险需求强劲', + content: '详细内容...', + impact: 'bullish', + impactLevel: 4, + analysis: '特朗普关税政策"2.0"版本引发市场担忧,叠加地缘政治风险,黄金避险属性凸显。技术面突破历史高点,多头趋势强劲。预计金价短期维持强势,回调即是买入机会。', + risks: ['获利回吐压力', '美元反弹风险', '美联储政策转向'], + affectedSymbols: ['AU', 'AG'], + }, + { + title: '铜供应紧张预期', + summary: '全球铜市场预计出现18万吨供应缺口,美国或加征铜进口关税', + content: '详细内容...', + impact: 'bullish', + impactLevel: 4, + analysis: '铜精矿TC现货指数持续回落,矿山供应增长放缓。美国可能加征铜进口关税,刺激美铜价格上涨,全球套利行为收紧供应。需求端新能源产业用铜需求快速增长,供需矛盾支撑铜价。', + risks: ['需求放缓风险', '美元走强压制', '库存累积'], + affectedSymbols: ['CU'], + }, + { + title: '美联储通胀数据超预期', + summary: '核心PCE数据超预期,降息预期降温', + content: '详细内容...', + impact: 'bearish', + impactLevel: 3, + analysis: '美国2月核心PCE通胀数据超预期,市场对美联储降息预期降温。美元指数短期获得支撑,对大宗商品形成一定压制。但地缘政治风险对冲了部分利空影响。', + risks: ['加息预期升温', '美元持续走强', '风险资产抛售'], + affectedSymbols: ['AU', 'AG', 'SC', 'CU'], + }, + { + title: 'OPEC+减产延期预期', + summary: 'OPEC+可能延长减产协议至二季度末', + content: '详细内容...', + impact: 'bullish', + impactLevel: 3, + analysis: 'OPEC+成员国倾向于延长减产协议以支撑油价。全球原油需求预期改善,叠加供应端约束,原油市场供需格局趋紧。关注减产协议正式落地情况。', + risks: ['减产执行力度', '非OPEC增产', '需求不及预期'], + affectedSymbols: ['SC'], + }, + ]; + + for (const event of events) { + const existing = await prisma.hotEvent.findFirst({ + where: { title: event.title }, + }); + + if (!existing) { + // 查找产品ID + const products = await prisma.product.findMany({ + where: { symbol: { in: event.affectedSymbols } }, + }); + + await prisma.hotEvent.create({ + data: { + title: event.title, + summary: event.summary, + content: event.content, + impact: event.impact, + impactLevel: event.impactLevel, + analysis: event.analysis, + risks: event.risks, + affectedProducts: { + create: products.map((p) => ({ + productId: p.id, + impactConfidence: 0.8, + })), + }, + }, + }); + } + } + + console.log(`✅ 已创建 ${events.length} 个热点事件`); + + // 创建系统配置 + const configs = [ + { key: 'MARKET_STATUS', value: 'open', description: '市场状态' }, + { key: 'TRADING_HOURS', value: '09:00-11:30,13:30-15:00,21:00-02:30', description: '交易时间' }, + ]; + + for (const config of configs) { + await prisma.systemConfig.upsert({ + where: { key: config.key }, + update: config, + create: config, + }); + } + + console.log(`✅ 已创建 ${configs.length} 个系统配置`); + + console.log('✨ 种子数据完成!'); +} + +main() + .catch((e) => { + console.error('❌ 种子数据失败:', e); + process.exit(1); + }) + .finally(async () => { + await prisma.$disconnect(); + }); diff --git a/app/server/src/ai/ai.controller.ts b/app/server/src/ai/ai.controller.ts new file mode 100644 index 0000000..68411e1 --- /dev/null +++ b/app/server/src/ai/ai.controller.ts @@ -0,0 +1,31 @@ +import { Controller, Get, Param, Query } from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger'; +import { AiService } from './ai.service'; + +@ApiTags('AI智能分析') +@Controller('ai') +export class AiController { + constructor(private readonly aiService: AiService) {} + + @Get('analyze/:symbol') + @ApiOperation({ summary: 'AI智能分析品种' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + @ApiResponse({ status: 200, description: '分析成功' }) + async analyzeSymbol(@Param('symbol') symbol: string) { + return this.aiService.analyzeSymbol(symbol); + } + + @Get('batch-analyze') + @ApiOperation({ summary: '批量AI分析' }) + @ApiResponse({ status: 200, description: '分析成功' }) + async batchAnalyze(@Query('symbols') symbols: string) { + const symbolList = symbols.split(','); + const results = await Promise.all( + symbolList.map((s) => this.aiService.analyzeSymbol(s.trim())), + ); + return symbolList.reduce((acc, symbol, index) => { + acc[symbol] = results[index]; + return acc; + }, {}); + } +} diff --git a/app/server/src/ai/ai.module.ts b/app/server/src/ai/ai.module.ts new file mode 100644 index 0000000..92e27f3 --- /dev/null +++ b/app/server/src/ai/ai.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { AiController } from './ai.controller'; +import { AiService } from './ai.service'; +import { MarketModule } from '../market/market.module'; +import { IndicatorsModule } from '../indicators/indicators.module'; + +@Module({ + imports: [ConfigModule, MarketModule, IndicatorsModule], + controllers: [AiController], + providers: [AiService], + exports: [AiService], +}) +export class AiModule {} diff --git a/app/server/src/ai/ai.service.ts b/app/server/src/ai/ai.service.ts new file mode 100644 index 0000000..9a5c59d --- /dev/null +++ b/app/server/src/ai/ai.service.ts @@ -0,0 +1,366 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import OpenAI from 'openai'; +import { MarketService } from '../market/market.service'; +import { IndicatorsService } from '../indicators/indicators.service'; + +export interface AIAnalysisResult { + summary: string; + trend: 'bullish' | 'bearish' | 'neutral'; + confidence: number; + keyFactors: string[]; + supportLevels: number[]; + resistanceLevels: number[]; + recommendation: { + action: 'buy' | 'sell' | 'hold'; + entryPrice?: number; + stopLoss?: number; + targetPrice?: number; + reasoning: string; + }; + riskFactors: string[]; +} + +@Injectable() +export class AiService { + private readonly logger = new Logger(AiService.name); + private openai: OpenAI | null = null; + + constructor( + private readonly configService: ConfigService, + private readonly marketService: MarketService, + private readonly indicatorsService: IndicatorsService, + ) { + const apiKey = this.configService.get('openai.apiKey'); + if (apiKey) { + this.openai = new OpenAI({ + apiKey, + baseURL: this.configService.get('openai.baseURL'), + }); + } + } + + /** + * AI智能分析品种 + */ + async analyzeSymbol(symbol: string): Promise { + try { + // 获取市场数据 + const [product, klineData, indicators] = await Promise.all([ + this.marketService.getProduct(symbol), + this.marketService.getKlineData(symbol, '1d', 60), + this.indicatorsService.calculateAllIndicators(symbol, '1d'), + ]); + + // 计算技术指标信号 + const technicalSignals = this.analyzeTechnicalIndicators(indicators); + + // 如果有OpenAI API,使用AI分析 + if (this.openai) { + return await this.analyzeWithAI(symbol, product, klineData, indicators, technicalSignals); + } + + // 否则使用规则分析 + return this.analyzeWithRules(symbol, product, klineData, indicators, technicalSignals); + } catch (error) { + this.logger.error(`AI分析失败 ${symbol}:`, error.message); + return this.getDefaultAnalysis(symbol); + } + } + + /** + * 使用OpenAI进行分析 + */ + private async analyzeWithAI( + symbol: string, + product: any, + klineData: any[], + indicators: any, + technicalSignals: any, + ): Promise { + const prompt = this.buildAnalysisPrompt(symbol, product, klineData, indicators, technicalSignals); + + try { + const response = await this.openai!.chat.completions.create({ + model: this.configService.get('openai.model') || 'gpt-4-turbo-preview', + messages: [ + { + role: 'system', + content: '你是一位专业的期货分析师,擅长技术分析和基本面分析。请基于提供的数据给出专业的分析和交易建议。', + }, + { + role: 'user', + content: prompt, + }, + ], + temperature: 0.7, + max_tokens: 2000, + }); + + const content = response.choices[0]?.message?.content; + if (!content) { + throw new Error('AI返回空响应'); + } + + return this.parseAIResponse(content, symbol, product); + } catch (error) { + this.logger.error('AI分析请求失败:', error.message); + return this.analyzeWithRules(symbol, product, klineData, indicators, technicalSignals); + } + } + + /** + * 基于规则的分析 + */ + private analyzeWithRules( + symbol: string, + product: any, + klineData: any[], + indicators: any, + technicalSignals: any, + ): AIAnalysisResult { + const currentPrice = product.price; + const lastKline = klineData[klineData.length - 1]; + + // 综合评分 + let bullishScore = 0; + let bearishScore = 0; + + if (technicalSignals.macd === 'bullish') bullishScore += 2; + if (technicalSignals.macd === 'bearish') bearishScore += 2; + + if (technicalSignals.rsi === 'oversold') bullishScore += 1; + if (technicalSignals.rsi === 'overbought') bearishScore += 1; + + if (technicalSignals.kdj === 'golden_cross') bullishScore += 2; + if (technicalSignals.kdj === 'dead_cross') bearishScore += 2; + + // 趋势判断 + const trendChange = lastKline.close - klineData[klineData.length - 20].close; + if (trendChange > 0) bullishScore += 1; + else bearishScore += 1; + + // 确定整体趋势 + let trend: 'bullish' | 'bearish' | 'neutral' = 'neutral'; + let confidence = 50; + + if (bullishScore > bearishScore) { + trend = 'bullish'; + confidence = 50 + (bullishScore - bearishScore) * 10; + } else if (bearishScore > bullishScore) { + trend = 'bearish'; + confidence = 50 + (bearishScore - bullishScore) * 10; + } + + confidence = Math.min(confidence, 95); + + // 计算支撑阻力位 + const supportLevels = this.calculateSupportLevels(klineData); + const resistanceLevels = this.calculateResistanceLevels(klineData); + + // 生成建议 + const recommendation = this.generateRecommendation( + trend, currentPrice, supportLevels, resistanceLevels, confidence, + ); + + return { + summary: this.generateSummary(symbol, trend, technicalSignals), + trend, + confidence, + keyFactors: this.generateKeyFactors(technicalSignals), + supportLevels, + resistanceLevels, + recommendation, + riskFactors: this.generateRiskFactors(trend, technicalSignals), + }; + } + + /** + * 分析技术指标信号 + */ + private analyzeTechnicalIndicators(indicators: any): any { + const signals: any = {}; + + // MACD信号 + const macdLast = indicators.macd[indicators.macd.length - 1]; + const macdPrev = indicators.macd[indicators.macd.length - 2]; + if (macdPrev.dif < macdPrev.dea && macdLast.dif > macdLast.dea) { + signals.macd = 'bullish'; + } else if (macdPrev.dif > macdPrev.dea && macdLast.dif < macdLast.dea) { + signals.macd = 'bearish'; + } else { + signals.macd = 'neutral'; + } + + // RSI信号 + const rsiLast = indicators.rsi[indicators.rsi.length - 1]; + signals.rsi = rsiLast.status; + + // KDJ信号 + const kdjLast = indicators.kdj[indicators.kdj.length - 1]; + signals.kdj = kdjLast.signal; + + // 布林带信号 + const bollLast = indicators.bollinger[indicators.bollinger.length - 1]; + signals.bollinger = bollLast.position; + + return signals; + } + + private buildAnalysisPrompt( + symbol: string, + product: any, + klineData: any[], + indicators: any, + signals: any, + ): string { + const recentKlines = klineData.slice(-20); + const currentPrice = product.price; + + return ` +请分析期货品种 ${symbol} (${product.name}) 的技术面并给出交易建议。 + +当前价格: ${currentPrice} +涨跌幅: ${product.changePercent}% + +最近20日K线数据: +${recentKlines.map(k => + `日期: ${k.time}, 开盘: ${k.open}, 最高: ${k.high}, 最低: ${k.low}, 收盘: ${k.close}, 成交量: ${k.volume}` +).join('\n')} + +技术指标: +MACD: DIF=${indicators.macd[indicators.macd.length - 1].dif}, DEA=${indicators.macd[indicators.macd.length - 1].dea} +RSI: ${indicators.rsi[indicators.rsi.length - 1].value} +KDJ: K=${indicators.kdj[indicators.kdj.length - 1].k}, D=${indicators.kdj[indicators.kdj.length - 1].d}, J=${indicators.kdj[indicators.kdj.length - 1].j} +布林带: 上轨=${indicators.bollinger[indicators.bollinger.length - 1].upper}, 中轨=${indicators.bollinger[indicators.bollinger.length - 1].middle}, 下轨=${indicators.bollinger[indicators.bollinger.length - 1].lower} + +请提供以下分析结果(JSON格式): +{ + "summary": "技术面综述", + "trend": "bullish/bearish/neutral", + "confidence": 75, + "keyFactors": ["关键因素1", "关键因素2"], + "supportLevels": [支撑位1, 支撑位2], + "resistanceLevels": [阻力位1, 阻力位2], + "recommendation": { + "action": "buy/sell/hold", + "entryPrice": 建议入场价, + "stopLoss": 止损价, + "targetPrice": 目标价, + "reasoning": "建议理由" + }, + "riskFactors": ["风险因素1", "风险因素2"] +} +`; + } + + private parseAIResponse(content: string, symbol: string, product: any): AIAnalysisResult { + try { + // 尝试从响应中提取JSON + const jsonMatch = content.match(/\{[\s\S]*\}/); + if (jsonMatch) { + const parsed = JSON.parse(jsonMatch[0]); + return { + summary: parsed.summary || '', + trend: parsed.trend || 'neutral', + confidence: parsed.confidence || 50, + keyFactors: parsed.keyFactors || [], + supportLevels: parsed.supportLevels || [], + resistanceLevels: parsed.resistanceLevels || [], + recommendation: parsed.recommendation || { action: 'hold', reasoning: '' }, + riskFactors: parsed.riskFactors || [], + }; + } + } catch (error) { + this.logger.error('解析AI响应失败:', error.message); + } + + return this.getDefaultAnalysis(symbol); + } + + private calculateSupportLevels(klineData: any[]): number[] { + const lows = klineData.slice(-20).map(k => k.low); + lows.sort((a, b) => a - b); + return [lows[2], lows[5]].filter(Boolean); + } + + private calculateResistanceLevels(klineData: any[]): number[] { + const highs = klineData.slice(-20).map(k => k.high); + highs.sort((a, b) => b - a); + return [highs[2], highs[5]].filter(Boolean); + } + + private generateRecommendation( + trend: string, + currentPrice: number, + supports: number[], + resistances: number[], + confidence: number, + ): AIAnalysisResult['recommendation'] { + const volatility = currentPrice * 0.02; + + if (trend === 'bullish') { + return { + action: 'buy', + entryPrice: currentPrice, + stopLoss: supports[0] || currentPrice - volatility, + targetPrice: resistances[0] || currentPrice + volatility * 2, + reasoning: `技术分析显示多头趋势,信心指数${confidence}%。建议在支撑位附近入场,严格设置止损。`, + }; + } else if (trend === 'bearish') { + return { + action: 'sell', + entryPrice: currentPrice, + stopLoss: resistances[0] || currentPrice + volatility, + targetPrice: supports[0] || currentPrice - volatility * 2, + reasoning: `技术分析显示空头趋势,信心指数${confidence}%。建议逢高做空,严格设置止损。`, + }; + } + + return { + action: 'hold', + reasoning: '市场方向不明,建议观望等待更清晰的趋势信号。', + }; + } + + private generateSummary(symbol: string, trend: string, signals: any): string { + const trendText = trend === 'bullish' ? '偏多' : trend === 'bearish' ? '偏空' : '震荡'; + return `${symbol}当前技术面${trendText}。MACD显示${signals.macd === 'bullish' ? '金叉' : signals.macd === 'bearish' ? '死叉' : '中性'},RSI处于${signals.rsi}区域,KDJ${signals.kdj === 'golden_cross' ? '金叉' : signals.kdj === 'dead_cross' ? '死叉' : '中性'}。`; + } + + private generateKeyFactors(signals: any): string[] { + const factors: string[] = []; + if (signals.macd === 'bullish') factors.push('MACD金叉'); + if (signals.macd === 'bearish') factors.push('MACD死叉'); + if (signals.rsi === 'oversold') factors.push('RSI超卖'); + if (signals.rsi === 'overbought') factors.push('RSI超买'); + if (signals.kdj === 'golden_cross') factors.push('KDJ金叉'); + if (signals.kdj === 'dead_cross') factors.push('KDJ死叉'); + return factors.length > 0 ? factors : ['技术指标中性']; + } + + private generateRiskFactors(trend: string, signals: any): string[] { + const risks: string[] = ['市场系统性风险', '黑天鹅事件']; + if (trend === 'bullish') risks.push('获利回吐压力'); + if (trend === 'bearish') risks.push('超跌反弹风险'); + if (signals.rsi === 'overbought') risks.push('技术指标超买'); + if (signals.rsi === 'oversold') risks.push('技术指标超卖'); + return risks; + } + + private getDefaultAnalysis(symbol: string): AIAnalysisResult { + return { + summary: `${symbol} 数据暂时无法获取完整分析`, + trend: 'neutral', + confidence: 50, + keyFactors: ['数据不足'], + supportLevels: [], + resistanceLevels: [], + recommendation: { + action: 'hold', + reasoning: '数据不足,建议观望', + }, + riskFactors: ['数据获取失败'], + }; + } +} diff --git a/app/server/src/alert/alert.module.ts b/app/server/src/alert/alert.module.ts new file mode 100644 index 0000000..f5d797b --- /dev/null +++ b/app/server/src/alert/alert.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { AlertService } from './alert.service'; +import { MarketModule } from '../market/market.module'; + +@Module({ + imports: [MarketModule], + providers: [AlertService], + exports: [AlertService], +}) +export class AlertModule {} diff --git a/app/server/src/alert/alert.service.ts b/app/server/src/alert/alert.service.ts new file mode 100644 index 0000000..da1aaa8 --- /dev/null +++ b/app/server/src/alert/alert.service.ts @@ -0,0 +1,161 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { Cron, CronExpression } from '@nestjs/schedule'; +import { PrismaService } from '@common/prisma/prisma.service'; +import { RedisService } from '@common/redis/redis.service'; +import { MarketService } from '../market/market.service'; + +export interface PriceAlert { + id: string; + symbol: string; + alertType: 'above' | 'below'; + alertPrice: number; + isActive: boolean; +} + +@Injectable() +export class AlertService { + private readonly logger = new Logger(AlertService.name); + + constructor( + private readonly prisma: PrismaService, + private readonly redis: RedisService, + private readonly marketService: MarketService, + ) {} + + /** + * 创建价格预警 + */ + async createAlert( + userId: number, + symbol: string, + alertType: 'above' | 'below', + alertPrice: number, + ): Promise { + // 验证品种存在 + await this.marketService.getProduct(symbol); + + const alert = await this.prisma.priceAlert.create({ + data: { + userId, + symbol: symbol.toUpperCase(), + alertType, + alertPrice, + isActive: true, + }, + }); + + return { + id: alert.id.toString(), + symbol: alert.symbol, + alertType: alert.alertType as 'above' | 'below', + alertPrice: Number(alert.alertPrice), + isActive: alert.isActive, + }; + } + + /** + * 获取用户的价格预警 + */ + async getUserAlerts(userId: number): Promise { + const alerts = await this.prisma.priceAlert.findMany({ + where: { userId }, + orderBy: { createdAt: 'desc' }, + }); + + return alerts.map((alert) => ({ + id: alert.id.toString(), + symbol: alert.symbol, + alertType: alert.alertType as 'above' | 'below', + alertPrice: Number(alert.alertPrice), + isActive: alert.isActive, + })); + } + + /** + * 删除价格预警 + */ + async deleteAlert(userId: number, alertId: string): Promise { + const alert = await this.prisma.priceAlert.findFirst({ + where: { + id: parseInt(alertId), + userId, + }, + }); + + if (!alert) { + throw new Error('预警不存在'); + } + + await this.prisma.priceAlert.delete({ + where: { id: parseInt(alertId) }, + }); + } + + /** + * 停用/启用预警 + */ + async toggleAlert(userId: number, alertId: string, isActive: boolean): Promise { + const alert = await this.prisma.priceAlert.update({ + where: { + id: parseInt(alertId), + }, + data: { isActive }, + }); + + return { + id: alert.id.toString(), + symbol: alert.symbol, + alertType: alert.alertType as 'above' | 'below', + alertPrice: Number(alert.alertPrice), + isActive: alert.isActive, + }; + } + + /** + * 定时检查价格预警 + */ + @Cron(CronExpression.EVERY_MINUTE) + async checkPriceAlerts() { + try { + const activeAlerts = await this.prisma.priceAlert.findMany({ + where: { isActive: true }, + }); + + for (const alert of activeAlerts) { + try { + const tick = await this.marketService.getTickData(alert.symbol); + const currentPrice = tick.price; + const alertPrice = Number(alert.alertPrice); + + let triggered = false; + + if (alert.alertType === 'above' && currentPrice >= alertPrice) { + triggered = true; + } else if (alert.alertType === 'below' && currentPrice <= alertPrice) { + triggered = true; + } + + if (triggered) { + // 标记为已触发 + await this.prisma.priceAlert.update({ + where: { id: alert.id }, + data: { + isActive: false, + triggeredAt: new Date(), + }, + }); + + // TODO: 发送通知(邮件/短信/推送) + this.logger.log( + `价格预警触发: ${alert.symbol} ${alert.alertType} ${alertPrice}, 当前价格: ${currentPrice}`, + ); + } + } catch (error) { + this.logger.error(`检查预警失败 ${alert.symbol}:`, error.message); + } + } + } catch (error) { + this.logger.error('检查价格预警失败:', error.message); + } + } +} diff --git a/app/server/src/app.module.ts b/app/server/src/app.module.ts new file mode 100644 index 0000000..cb30191 --- /dev/null +++ b/app/server/src/app.module.ts @@ -0,0 +1,87 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { ScheduleModule } from '@nestjs/schedule'; +import { APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core'; +import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler'; + +// 配置模块 +import appConfig from './config/app.config'; +import databaseConfig from './config/database.config'; +import redisConfig from './config/redis.config'; +import jwtConfig from './config/jwt.config'; +import marketDataConfig from './config/market-data.config'; +import openaiConfig from './config/openai.config'; + +// 功能模块 +import { AuthModule } from './auth/auth.module'; +import { UserModule } from './user/user.module'; +import { MarketModule } from './market/market.module'; +import { IndicatorsModule } from './indicators/indicators.module'; +import { OptionsModule } from './options/options.module'; +import { AiModule } from './ai/ai.module'; +import { EventsModule } from './events/events.module'; +import { WatchlistModule } from './watchlist/watchlist.module'; +import { AlertModule } from './alert/alert.module'; +import { CommonModule } from './common/common.module'; + +// 拦截器 +import { TransformInterceptor } from './common/interceptors/transform.interceptor'; +import { LoggingInterceptor } from './common/interceptors/logging.interceptor'; + +@Module({ + imports: [ + // 配置模块 + ConfigModule.forRoot({ + isGlobal: true, + load: [ + appConfig, + databaseConfig, + redisConfig, + jwtConfig, + marketDataConfig, + openaiConfig, + ], + envFilePath: ['.env.local', '.env'], + }), + + // 限流模块 + ThrottlerModule.forRoot([{ + ttl: 60000, // 1分钟 + limit: 100, // 每IP每分钟最多100请求 + }]), + + // 定时任务模块 + ScheduleModule.forRoot(), + + // 公共模块 + CommonModule, + + // 业务模块 + AuthModule, + UserModule, + MarketModule, + IndicatorsModule, + OptionsModule, + AiModule, + EventsModule, + WatchlistModule, + AlertModule, + ], + providers: [ + // 全局拦截器 + { + provide: APP_INTERCEPTOR, + useClass: LoggingInterceptor, + }, + { + provide: APP_INTERCEPTOR, + useClass: TransformInterceptor, + }, + // 全局限流守卫 + { + provide: APP_GUARD, + useClass: ThrottlerGuard, + }, + ], +}) +export class AppModule {} diff --git a/app/server/src/auth/auth.controller.ts b/app/server/src/auth/auth.controller.ts new file mode 100644 index 0000000..37616fd --- /dev/null +++ b/app/server/src/auth/auth.controller.ts @@ -0,0 +1,76 @@ +import { + Controller, + Post, + Body, + Get, + Put, + Headers, + UseGuards, + HttpCode, + HttpStatus, +} from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiBearerAuth, ApiResponse } from '@nestjs/swagger'; +import { AuthService } from './auth.service'; +import { JwtAuthGuard } from './guards/jwt-auth.guard'; +import { CurrentUser } from './decorators/current-user.decorator'; +import { RegisterDto, LoginDto, AuthResponseDto, UserProfileDto } from './dto/auth.dto'; + +@ApiTags('认证') +@Controller('auth') +export class AuthController { + constructor(private readonly authService: AuthService) {} + + @Post('register') + @ApiOperation({ summary: '用户注册' }) + @ApiResponse({ status: 201, description: '注册成功', type: AuthResponseDto }) + @ApiResponse({ status: 400, description: '参数错误或用户已存在' }) + async register(@Body() dto: RegisterDto) { + return this.authService.register(dto); + } + + @Post('login') + @HttpCode(HttpStatus.OK) + @ApiOperation({ summary: '用户登录' }) + @ApiResponse({ status: 200, description: '登录成功', type: AuthResponseDto }) + @ApiResponse({ status: 401, description: '用户名或密码错误' }) + async login(@Body() dto: LoginDto) { + return this.authService.login(dto); + } + + @Post('logout') + @HttpCode(HttpStatus.OK) + @UseGuards(JwtAuthGuard) + @ApiBearerAuth() + @ApiOperation({ summary: '用户登出' }) + async logout(@Headers('authorization') auth: string) { + const token = auth?.replace('Bearer ', ''); + return this.authService.logout(token); + } + + @Post('refresh') + @HttpCode(HttpStatus.OK) + @ApiOperation({ summary: '刷新Token' }) + async refreshToken(@Body('refreshToken') refreshToken: string) { + return this.authService.refreshToken(refreshToken); + } + + @Get('profile') + @UseGuards(JwtAuthGuard) + @ApiBearerAuth() + @ApiOperation({ summary: '获取用户信息' }) + @ApiResponse({ status: 200, description: '获取成功', type: UserProfileDto }) + async getProfile(@CurrentUser('userId') userId: number) { + return this.authService.getProfile(userId); + } + + @Put('profile') + @UseGuards(JwtAuthGuard) + @ApiBearerAuth() + @ApiOperation({ summary: '更新用户信息' }) + async updateProfile( + @CurrentUser('userId') userId: number, + @Body() data: Partial<{ phone: string; avatarUrl: string }>, + ) { + return this.authService.updateProfile(userId, data); + } +} diff --git a/app/server/src/auth/auth.module.ts b/app/server/src/auth/auth.module.ts new file mode 100644 index 0000000..f8f5c8a --- /dev/null +++ b/app/server/src/auth/auth.module.ts @@ -0,0 +1,26 @@ +import { Module } from '@nestjs/common'; +import { JwtModule } from '@nestjs/jwt'; +import { ConfigService } from '@nestjs/config'; +import { PassportModule } from '@nestjs/passport'; +import { AuthService } from './auth.service'; +import { AuthController } from './auth.controller'; +import { JwtStrategy } from './strategies/jwt.strategy'; + +@Module({ + imports: [ + PassportModule.register({ defaultStrategy: 'jwt' }), + JwtModule.registerAsync({ + useFactory: (configService: ConfigService) => ({ + secret: configService.get('jwt.secret'), + signOptions: { + expiresIn: configService.get('jwt.expiresIn'), + }, + }), + inject: [ConfigService], + }), + ], + controllers: [AuthController], + providers: [AuthService, JwtStrategy], + exports: [AuthService], +}) +export class AuthModule {} diff --git a/app/server/src/auth/auth.service.ts b/app/server/src/auth/auth.service.ts new file mode 100644 index 0000000..7825d60 --- /dev/null +++ b/app/server/src/auth/auth.service.ts @@ -0,0 +1,212 @@ +import { Injectable, UnauthorizedException, BadRequestException } from '@nestjs/common'; +import { JwtService } from '@nestjs/jwt'; +import { ConfigService } from '@nestjs/config'; +import * as bcrypt from 'bcrypt'; +import { PrismaService } from '@common/prisma/prisma.service'; +import { RedisService } from '@common/redis/redis.service'; +import { RegisterDto, LoginDto } from './dto/auth.dto'; + +@Injectable() +export class AuthService { + constructor( + private readonly prisma: PrismaService, + private readonly jwtService: JwtService, + private readonly configService: ConfigService, + private readonly redis: RedisService, + ) {} + + async register(dto: RegisterDto) { + // 检查用户名是否已存在 + const existingUser = await this.prisma.user.findFirst({ + where: { + OR: [ + { username: dto.username }, + { email: dto.email }, + ], + }, + }); + + if (existingUser) { + throw new BadRequestException('用户名或邮箱已存在'); + } + + // 加密密码 + const passwordHash = await bcrypt.hash(dto.password, 10); + + // 创建用户 + const user = await this.prisma.user.create({ + data: { + username: dto.username, + email: dto.email, + passwordHash, + phone: dto.phone, + }, + select: { + id: true, + username: true, + email: true, + avatarUrl: true, + membershipLevel: true, + createdAt: true, + }, + }); + + // 生成Token + const tokens = await this.generateTokens(user.id, user.username); + + return { + user, + ...tokens, + }; + } + + async login(dto: LoginDto) { + // 查找用户 + const user = await this.prisma.user.findFirst({ + where: { + OR: [ + { username: dto.username }, + { email: dto.username }, + ], + }, + }); + + if (!user) { + throw new UnauthorizedException('用户名或密码错误'); + } + + // 验证密码 + const isPasswordValid = await bcrypt.compare(dto.password, user.passwordHash); + if (!isPasswordValid) { + throw new UnauthorizedException('用户名或密码错误'); + } + + // 检查用户状态 + if (!user.isActive) { + throw new UnauthorizedException('账户已被禁用'); + } + + // 生成Token + const tokens = await this.generateTokens(user.id, user.username); + + // 保存会话到Redis + const ttl = parseInt(this.configService.get('jwt.expiresIn'), 10) || 3600; + await this.redis.setSession(tokens.token, user.id, ttl); + + return { + user: { + id: user.id, + username: user.username, + email: user.email, + avatarUrl: user.avatarUrl, + membershipLevel: user.membershipLevel, + }, + ...tokens, + }; + } + + async logout(token: string) { + await this.redis.deleteSession(token); + return { message: '登出成功' }; + } + + async refreshToken(refreshToken: string) { + try { + const payload = this.jwtService.verify(refreshToken, { + secret: this.configService.get('jwt.secret'), + }); + + const user = await this.prisma.user.findUnique({ + where: { id: payload.sub }, + }); + + if (!user || !user.isActive) { + throw new UnauthorizedException('用户不存在或已被禁用'); + } + + const tokens = await this.generateTokens(user.id, user.username); + + // 更新会话 + const ttl = parseInt(this.configService.get('jwt.expiresIn'), 10) || 3600; + await this.redis.setSession(tokens.token, user.id, ttl); + + return tokens; + } catch (error) { + throw new UnauthorizedException('无效的刷新令牌'); + } + } + + async getProfile(userId: number) { + const user = await this.prisma.user.findUnique({ + where: { id: userId }, + select: { + id: true, + username: true, + email: true, + phone: true, + avatarUrl: true, + membershipLevel: true, + createdAt: true, + }, + }); + + if (!user) { + throw new UnauthorizedException('用户不存在'); + } + + return user; + } + + async updateProfile(userId: number, data: Partial<{ phone: string; avatarUrl: string }>) { + const user = await this.prisma.user.update({ + where: { id: userId }, + data, + select: { + id: true, + username: true, + email: true, + phone: true, + avatarUrl: true, + membershipLevel: true, + }, + }); + + return user; + } + + private async generateTokens(userId: number, username: string) { + const payload = { sub: userId, username }; + + const [token, refreshToken] = await Promise.all([ + this.jwtService.signAsync(payload), + this.jwtService.signAsync(payload, { + expiresIn: this.configService.get('jwt.refreshExpiresIn') || '7d', + }), + ]); + + return { + token, + refreshToken, + expiresIn: parseInt(this.configService.get('jwt.expiresIn'), 10) || 3600, + }; + } + + async validateUser(userId: number) { + const user = await this.prisma.user.findUnique({ + where: { id: userId }, + select: { + id: true, + username: true, + email: true, + isActive: true, + membershipLevel: true, + }, + }); + + if (!user || !user.isActive) { + return null; + } + + return user; + } +} diff --git a/app/server/src/auth/decorators/current-user.decorator.ts b/app/server/src/auth/decorators/current-user.decorator.ts new file mode 100644 index 0000000..4e21d76 --- /dev/null +++ b/app/server/src/auth/decorators/current-user.decorator.ts @@ -0,0 +1,14 @@ +import { createParamDecorator, ExecutionContext } from '@nestjs/common'; + +export const CurrentUser = createParamDecorator( + (data: string | undefined, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + const user = request.user; + + if (!user) { + return null; + } + + return data ? user[data] : user; + }, +); diff --git a/app/server/src/auth/dto/auth.dto.ts b/app/server/src/auth/dto/auth.dto.ts new file mode 100644 index 0000000..3874bac --- /dev/null +++ b/app/server/src/auth/dto/auth.dto.ts @@ -0,0 +1,88 @@ +import { IsString, IsEmail, IsOptional, MinLength, IsPhoneNumber, IsUrl } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; + +export class RegisterDto { + @ApiProperty({ description: '用户名', example: 'trader001' }) + @IsString() + @MinLength(3) + username: string; + + @ApiProperty({ description: '邮箱', example: 'user@example.com' }) + @IsEmail() + email: string; + + @ApiProperty({ description: '密码', example: 'password123' }) + @IsString() + @MinLength(6) + password: string; + + @ApiProperty({ description: '手机号', required: false, example: '13800138000' }) + @IsOptional() + @IsPhoneNumber('CN') + phone?: string; +} + +export class LoginDto { + @ApiProperty({ description: '用户名或邮箱', example: 'trader001' }) + @IsString() + username: string; + + @ApiProperty({ description: '密码', example: 'password123' }) + @IsString() + password: string; +} + +export class AuthResponseDto { + @ApiProperty() + user: { + id: number; + username: string; + email: string; + avatarUrl: string | null; + membershipLevel: number; + }; + + @ApiProperty() + token: string; + + @ApiProperty() + refreshToken: string; + + @ApiProperty() + expiresIn: number; +} + +export class UserProfileDto { + @ApiProperty() + id: number; + + @ApiProperty() + username: string; + + @ApiProperty() + email: string; + + @ApiProperty({ nullable: true }) + phone: string | null; + + @ApiProperty({ nullable: true }) + avatarUrl: string | null; + + @ApiProperty() + membershipLevel: number; + + @ApiProperty() + createdAt: Date; +} + +export class UpdateProfileDto { + @ApiProperty({ required: false }) + @IsOptional() + @IsPhoneNumber('CN') + phone?: string; + + @ApiProperty({ required: false }) + @IsOptional() + @IsUrl() + avatarUrl?: string; +} diff --git a/app/server/src/auth/guards/jwt-auth.guard.ts b/app/server/src/auth/guards/jwt-auth.guard.ts new file mode 100644 index 0000000..ce4282a --- /dev/null +++ b/app/server/src/auth/guards/jwt-auth.guard.ts @@ -0,0 +1,19 @@ +import { Injectable, ExecutionContext, UnauthorizedException } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; +import { Observable } from 'rxjs'; + +@Injectable() +export class JwtAuthGuard extends AuthGuard('jwt') { + canActivate( + context: ExecutionContext, + ): boolean | Promise | Observable { + return super.canActivate(context); + } + + handleRequest(err, user, info) { + if (err || !user) { + throw err || new UnauthorizedException('请先登录'); + } + return user; + } +} diff --git a/app/server/src/auth/strategies/jwt.strategy.ts b/app/server/src/auth/strategies/jwt.strategy.ts new file mode 100644 index 0000000..6d389ce --- /dev/null +++ b/app/server/src/auth/strategies/jwt.strategy.ts @@ -0,0 +1,38 @@ +import { Injectable, UnauthorizedException } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { ExtractJwt, Strategy } from 'passport-jwt'; +import { ConfigService } from '@nestjs/config'; +import { AuthService } from '../auth.service'; + +interface JwtPayload { + sub: number; + username: string; +} + +@Injectable() +export class JwtStrategy extends PassportStrategy(Strategy) { + constructor( + private readonly configService: ConfigService, + private readonly authService: AuthService, + ) { + super({ + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + ignoreExpiration: false, + secretOrKey: configService.get('jwt.secret'), + }); + } + + async validate(payload: JwtPayload) { + const user = await this.authService.validateUser(payload.sub); + + if (!user) { + throw new UnauthorizedException('用户不存在或已被禁用'); + } + + return { + userId: payload.sub, + username: payload.username, + membershipLevel: user.membershipLevel, + }; + } +} diff --git a/app/server/src/common/common.module.ts b/app/server/src/common/common.module.ts new file mode 100644 index 0000000..04b089f --- /dev/null +++ b/app/server/src/common/common.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { PrismaModule } from './prisma/prisma.module'; +import { RedisModule } from './redis/redis.module'; + +@Module({ + imports: [PrismaModule, RedisModule], + exports: [PrismaModule, RedisModule], +}) +export class CommonModule {} diff --git a/app/server/src/common/interceptors/logging.interceptor.ts b/app/server/src/common/interceptors/logging.interceptor.ts new file mode 100644 index 0000000..f09a7bb --- /dev/null +++ b/app/server/src/common/interceptors/logging.interceptor.ts @@ -0,0 +1,30 @@ +import { + Injectable, + NestInterceptor, + ExecutionContext, + CallHandler, +} from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; + +@Injectable() +export class LoggingInterceptor implements NestInterceptor { + intercept(context: ExecutionContext, next: CallHandler): Observable { + const request = context.switchToHttp().getRequest(); + const method = request.method; + const url = request.url; + const now = Date.now(); + + return next.handle().pipe( + tap(() => { + const response = context.switchToHttp().getResponse(); + const statusCode = response.statusCode; + const delay = Date.now() - now; + + console.log( + `[${new Date().toISOString()}] ${method} ${url} ${statusCode} - ${delay}ms`, + ); + }), + ); + } +} diff --git a/app/server/src/common/interceptors/transform.interceptor.ts b/app/server/src/common/interceptors/transform.interceptor.ts new file mode 100644 index 0000000..242c70d --- /dev/null +++ b/app/server/src/common/interceptors/transform.interceptor.ts @@ -0,0 +1,33 @@ +import { + Injectable, + NestInterceptor, + ExecutionContext, + CallHandler, +} from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +export interface Response { + code: number; + message: string; + data: T; + timestamp: number; +} + +@Injectable() +export class TransformInterceptor + implements NestInterceptor> { + intercept( + context: ExecutionContext, + next: CallHandler, + ): Observable> { + return next.handle().pipe( + map((data) => ({ + code: 200, + message: 'success', + data, + timestamp: Date.now(), + })), + ); + } +} diff --git a/app/server/src/common/prisma/prisma.module.ts b/app/server/src/common/prisma/prisma.module.ts new file mode 100644 index 0000000..7207426 --- /dev/null +++ b/app/server/src/common/prisma/prisma.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { PrismaService } from './prisma.service'; + +@Global() +@Module({ + providers: [PrismaService], + exports: [PrismaService], +}) +export class PrismaModule {} diff --git a/app/server/src/common/prisma/prisma.service.ts b/app/server/src/common/prisma/prisma.service.ts new file mode 100644 index 0000000..573fe59 --- /dev/null +++ b/app/server/src/common/prisma/prisma.service.ts @@ -0,0 +1,23 @@ +import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common'; +import { PrismaClient } from '@prisma/client'; + +@Injectable() +export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { + constructor() { + super({ + log: process.env.NODE_ENV === 'development' + ? ['query', 'info', 'warn', 'error'] + : ['error', 'warn'], + }); + } + + async onModuleInit() { + await this.$connect(); + console.log('📦 数据库连接成功'); + } + + async onModuleDestroy() { + await this.$disconnect(); + console.log('📦 数据库连接已关闭'); + } +} diff --git a/app/server/src/common/redis/redis.module.ts b/app/server/src/common/redis/redis.module.ts new file mode 100644 index 0000000..f5f6c05 --- /dev/null +++ b/app/server/src/common/redis/redis.module.ts @@ -0,0 +1,30 @@ +import { Global, Module } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import Redis from 'ioredis'; +import { RedisService } from './redis.service'; + +@Global() +@Module({ + providers: [ + { + provide: 'REDIS_CLIENT', + useFactory: (configService: ConfigService) => { + const redisUrl = configService.get('redis.url'); + const redisPassword = configService.get('redis.password'); + + return new Redis(redisUrl, { + password: redisPassword || undefined, + retryStrategy: (times) => { + const delay = Math.min(times * 50, 2000); + return delay; + }, + maxRetriesPerRequest: 3, + }); + }, + inject: [ConfigService], + }, + RedisService, + ], + exports: [RedisService], +}) +export class RedisModule {} diff --git a/app/server/src/common/redis/redis.service.ts b/app/server/src/common/redis/redis.service.ts new file mode 100644 index 0000000..1d86bc7 --- /dev/null +++ b/app/server/src/common/redis/redis.service.ts @@ -0,0 +1,119 @@ +import { Injectable, Inject } from '@nestjs/common'; +import Redis from 'ioredis'; + +@Injectable() +export class RedisService { + constructor( + @Inject('REDIS_CLIENT') + private readonly redis: Redis, + ) {} + + // 基础操作 + async get(key: string): Promise { + return this.redis.get(key); + } + + async set(key: string, value: string, ttl?: number): Promise { + if (ttl) { + await this.redis.setex(key, ttl, value); + } else { + await this.redis.set(key, value); + } + } + + async del(key: string): Promise { + await this.redis.del(key); + } + + async exists(key: string): Promise { + const result = await this.redis.exists(key); + return result === 1; + } + + async expire(key: string, seconds: number): Promise { + await this.redis.expire(key, seconds); + } + + // Hash操作 + async hget(key: string, field: string): Promise { + return this.redis.hget(key, field); + } + + async hset(key: string, field: string, value: string): Promise { + await this.redis.hset(key, field, value); + } + + async hgetall(key: string): Promise> { + return this.redis.hgetall(key); + } + + async hdel(key: string, field: string): Promise { + await this.redis.hdel(key, field); + } + + // List操作 + async lpush(key: string, value: string): Promise { + await this.redis.lpush(key, value); + } + + async rpush(key: string, value: string): Promise { + await this.redis.rpush(key, value); + } + + async lrange(key: string, start: number, stop: number): Promise { + return this.redis.lrange(key, start, stop); + } + + // Sorted Set操作 + async zadd(key: string, score: number, member: string): Promise { + await this.redis.zadd(key, score, member); + } + + async zrange(key: string, start: number, stop: number): Promise { + return this.redis.zrange(key, start, stop); + } + + async zrevrange(key: string, start: number, stop: number): Promise { + return this.redis.zrevrange(key, start, stop); + } + + async zremrangebyscore(key: string, min: number, max: number): Promise { + await this.redis.zremrangebyscore(key, min, max); + } + + // 行情数据专用方法 + async setTick(symbol: string, data: Record, ttl: number = 60): Promise { + const key = `market:tick:${symbol}`; + await this.redis.hset(key, data); + await this.redis.expire(key, ttl); + } + + async getTick(symbol: string): Promise> { + const key = `market:tick:${symbol}`; + return this.redis.hgetall(key); + } + + async addKline(symbol: string, period: string, data: string, maxCount: number = 500): Promise { + const key = `market:kline:${symbol}:${period}`; + const score = Date.now(); + await this.redis.zadd(key, score, data); + await this.redis.zremrangebyrank(key, 0, -(maxCount + 1)); + await this.redis.expire(key, 7 * 24 * 60 * 60); + } + + async getKlines(symbol: string, period: string, count: number = 100): Promise { + const key = `market:kline:${symbol}:${period}`; + return this.redis.zrevrange(key, 0, count - 1); + } + + // Session管理 + async setSession(token: string, userId: number, ttl: number): Promise { + const key = `session:${token}`; + await this.redis.setex(key, ttl, userId.toString()); + } + + async deleteSession(token: string): Promise { + const key = `session:${token}`; + await this.redis.del(key); + } +} diff --git a/app/server/src/config/app.config.ts b/app/server/src/config/app.config.ts new file mode 100644 index 0000000..83f2931 --- /dev/null +++ b/app/server/src/config/app.config.ts @@ -0,0 +1,11 @@ +import { registerAs } from '@nestjs/config'; + +export default registerAs('app', () => ({ + nodeEnv: process.env.NODE_ENV || 'development', + port: parseInt(process.env.PORT, 10) || 3000, + apiPrefix: process.env.API_PREFIX || '/api/v1', + corsOrigin: process.env.CORS_ORIGIN || '*', + logLevel: process.env.LOG_LEVEL || 'debug', + metricsEnabled: process.env.METRICS_ENABLED === 'true', + metricsPort: parseInt(process.env.METRICS_PORT, 10) || 9090, +})); diff --git a/app/server/src/config/database.config.ts b/app/server/src/config/database.config.ts new file mode 100644 index 0000000..4bc5047 --- /dev/null +++ b/app/server/src/config/database.config.ts @@ -0,0 +1,5 @@ +import { registerAs } from '@nestjs/config'; + +export default registerAs('database', () => ({ + url: process.env.DATABASE_URL, +})); diff --git a/app/server/src/config/jwt.config.ts b/app/server/src/config/jwt.config.ts new file mode 100644 index 0000000..93028ba --- /dev/null +++ b/app/server/src/config/jwt.config.ts @@ -0,0 +1,7 @@ +import { registerAs } from '@nestjs/config'; + +export default registerAs('jwt', () => ({ + secret: process.env.JWT_SECRET || 'default-secret-change-in-production', + expiresIn: process.env.JWT_EXPIRES_IN || '1h', + refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '7d', +})); diff --git a/app/server/src/config/market-data.config.ts b/app/server/src/config/market-data.config.ts new file mode 100644 index 0000000..71eae08 --- /dev/null +++ b/app/server/src/config/market-data.config.ts @@ -0,0 +1,14 @@ +import { registerAs } from '@nestjs/config'; + +export default registerAs('marketData', () => ({ + provider: process.env.MARKET_DATA_PROVIDER || 'mock', + apiKey: process.env.MARKET_DATA_API_KEY, + apiSecret: process.env.MARKET_DATA_API_SECRET, + wsUrl: process.env.MARKET_DATA_WS_URL, + // 重连配置 + reconnectInterval: 5000, + maxReconnectAttempts: 10, + // 数据更新频率 (毫秒) + tickUpdateInterval: 1000, + klineUpdateInterval: 5000, +})); diff --git a/app/server/src/config/openai.config.ts b/app/server/src/config/openai.config.ts new file mode 100644 index 0000000..169fd73 --- /dev/null +++ b/app/server/src/config/openai.config.ts @@ -0,0 +1,14 @@ +import { registerAs } from '@nestjs/config'; + +export default registerAs('openai', () => ({ + apiKey: process.env.OPENAI_API_KEY, + baseURL: process.env.OPENAI_BASE_URL, + model: process.env.OPENAI_MODEL || 'gpt-4-turbo-preview', + // AI分析配置 + maxTokens: 2000, + temperature: 0.7, + // 请求限制 + maxRequestsPerMinute: 20, + // 缓存配置 + cacheTTL: 300, // 5分钟 +})); diff --git a/app/server/src/config/redis.config.ts b/app/server/src/config/redis.config.ts new file mode 100644 index 0000000..c49c4e6 --- /dev/null +++ b/app/server/src/config/redis.config.ts @@ -0,0 +1,6 @@ +import { registerAs } from '@nestjs/config'; + +export default registerAs('redis', () => ({ + url: process.env.REDIS_URL || 'redis://localhost:6379', + password: process.env.REDIS_PASSWORD, +})); diff --git a/app/server/src/events/events.controller.ts b/app/server/src/events/events.controller.ts new file mode 100644 index 0000000..61df4c7 --- /dev/null +++ b/app/server/src/events/events.controller.ts @@ -0,0 +1,42 @@ +import { Controller, Get, Param, Query } from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiParam, ApiQuery, ApiResponse } from '@nestjs/swagger'; +import { EventsService } from './events.service'; + +@ApiTags('热点事件') +@Controller('events') +export class EventsController { + constructor(private readonly eventsService: EventsService) {} + + @Get() + @ApiOperation({ summary: '获取热点事件列表' }) + @ApiQuery({ name: 'impact', required: false, enum: ['bullish', 'bearish', 'neutral'] }) + @ApiQuery({ name: 'startDate', required: false }) + @ApiQuery({ name: 'endDate', required: false }) + @ApiQuery({ name: 'page', required: false, type: Number }) + @ApiQuery({ name: 'size', required: false, type: Number }) + @ApiResponse({ status: 200, description: '获取成功' }) + async getEvents( + @Query('impact') impact?: string, + @Query('startDate') startDate?: string, + @Query('endDate') endDate?: string, + @Query('page') page = '1', + @Query('size') size = '20', + ) { + return this.eventsService.getEvents( + impact, + startDate ? new Date(startDate) : undefined, + endDate ? new Date(endDate) : undefined, + parseInt(page, 10), + parseInt(size, 10), + ); + } + + @Get(':id') + @ApiOperation({ summary: '获取事件详情' }) + @ApiParam({ name: 'id', description: '事件ID' }) + @ApiResponse({ status: 200, description: '获取成功' }) + @ApiResponse({ status: 404, description: '事件不存在' }) + async getEventById(@Param('id') id: string) { + return this.eventsService.getEventById(id); + } +} diff --git a/app/server/src/events/events.module.ts b/app/server/src/events/events.module.ts new file mode 100644 index 0000000..0fe946d --- /dev/null +++ b/app/server/src/events/events.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { EventsController } from './events.controller'; +import { EventsService } from './events.service'; +import { MarketModule } from '../market/market.module'; + +@Module({ + imports: [MarketModule], + controllers: [EventsController], + providers: [EventsService], + exports: [EventsService], +}) +export class EventsModule {} diff --git a/app/server/src/events/events.service.ts b/app/server/src/events/events.service.ts new file mode 100644 index 0000000..bab8e51 --- /dev/null +++ b/app/server/src/events/events.service.ts @@ -0,0 +1,170 @@ +import { Injectable } from '@nestjs/common'; +import { PrismaService } from '@common/prisma/prisma.service'; + +export interface HotEvent { + id: string; + title: string; + summary: string; + content?: string; + time: string; + impact: 'bullish' | 'bearish' | 'neutral'; + impactLevel: number; + affectedProducts: string[]; + analysis?: string; + risks?: string[]; + source?: string; +} + +@Injectable() +export class EventsService { + constructor(private readonly prisma: PrismaService) {} + + async getEvents( + impact?: string, + startDate?: Date, + endDate?: Date, + page = 1, + size = 20, + ): Promise<{ list: HotEvent[]; total: number }> { + const where: any = {}; + + if (impact && impact !== 'all') { + where.impact = impact; + } + + if (startDate || endDate) { + where.eventTime = {}; + if (startDate) where.eventTime.gte = startDate; + if (endDate) where.eventTime.lte = endDate; + } + + const [events, total] = await Promise.all([ + this.prisma.hotEvent.findMany({ + where, + include: { + affectedProducts: { + include: { + product: true, + }, + }, + }, + orderBy: { eventTime: 'desc' }, + skip: (page - 1) * size, + take: size, + }), + this.prisma.hotEvent.count({ where }), + ]); + + const list = events.map((e) => ({ + id: e.id.toString(), + title: e.title, + summary: e.summary || '', + content: e.content || undefined, + time: e.eventTime?.toISOString() || e.createdAt.toISOString(), + impact: e.impact as 'bullish' | 'bearish' | 'neutral', + impactLevel: e.impactLevel, + affectedProducts: e.affectedProducts.map((ep) => ep.product.symbol), + analysis: e.analysis || undefined, + risks: e.risks || undefined, + source: e.source || undefined, + })); + + return { list, total }; + } + + async getEventById(id: string): Promise { + const event = await this.prisma.hotEvent.findUnique({ + where: { id: parseInt(id) }, + include: { + affectedProducts: { + include: { + product: true, + }, + }, + }, + }); + + if (!event) return null; + + return { + id: event.id.toString(), + title: event.title, + summary: event.summary || '', + content: event.content || undefined, + time: event.eventTime?.toISOString() || event.createdAt.toISOString(), + impact: event.impact as 'bullish' | 'bearish' | 'neutral', + impactLevel: event.impactLevel, + affectedProducts: event.affectedProducts.map((ep) => ep.product.symbol), + analysis: event.analysis || undefined, + risks: event.risks || undefined, + source: event.source || undefined, + }; + } + + // 创建示例事件数据(用于初始化) + async seedEvents() { + const events = [ + { + title: '地缘政治风险升级', + summary: '美以袭伊朗,"海上油阀"被关,中东局势紧张升级', + content: '详细内容...', + impact: 'bullish', + impactLevel: 5, + analysis: '地缘政治风险急剧升温,霍尔木兹海峡封锁风险上升。原油供应中断担忧推动油价上涨,避险资产黄金、白银同步走强。', + risks: ['冲突升级可能', '供应中断风险', '波动率激增'], + affectedSymbols: ['SC', 'AU', 'AG'], + }, + { + title: '黄金价格创历史新高', + summary: 'COMEX黄金突破3100美元关口,避险需求强劲', + content: '详细内容...', + impact: 'bullish', + impactLevel: 4, + analysis: '特朗普关税政策引发市场担忧,叠加地缘政治风险,黄金避险属性凸显。技术面突破历史高点,多头趋势强劲。', + risks: ['获利回吐压力', '美元反弹风险', '美联储政策转向'], + affectedSymbols: ['AU', 'AG'], + }, + { + title: '铜供应紧张预期', + summary: '全球铜市场预计出现18万吨供应缺口', + content: '详细内容...', + impact: 'bullish', + impactLevel: 4, + analysis: '铜精矿TC现货指数持续回落,矿山供应增长放缓。美国可能加征铜进口关税,刺激美铜价格上涨。', + risks: ['需求放缓风险', '美元走强压制', '库存累积'], + affectedSymbols: ['CU'], + }, + ]; + + for (const event of events) { + const existing = await this.prisma.hotEvent.findFirst({ + where: { title: event.title }, + }); + + if (!existing) { + // 查找产品ID + const products = await this.prisma.product.findMany({ + where: { symbol: { in: event.affectedSymbols } }, + }); + + await this.prisma.hotEvent.create({ + data: { + title: event.title, + summary: event.summary, + content: event.content, + impact: event.impact, + impactLevel: event.impactLevel, + analysis: event.analysis, + risks: event.risks, + affectedProducts: { + create: products.map((p) => ({ + productId: p.id, + impactConfidence: 0.8, + })), + }, + }, + }); + } + } + } +} diff --git a/app/server/src/indicators/dto/indicator.dto.ts b/app/server/src/indicators/dto/indicator.dto.ts new file mode 100644 index 0000000..90fc776 --- /dev/null +++ b/app/server/src/indicators/dto/indicator.dto.ts @@ -0,0 +1,20 @@ +import { IsString, IsOptional, IsEnum, IsArray } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; +import { IndicatorType } from '../interfaces/indicator.interface'; + +export class GetIndicatorsDto { + @ApiProperty({ description: '周期', enum: ['1m', '5m', '15m', '30m', '1h', '1d', '1w'] }) + @IsString() + @IsEnum(['1m', '5m', '15m', '30m', '1h', '1d', '1w']) + period: string; + + @ApiProperty({ + description: '指标列表', + isArray: true, + enum: ['macd', 'rsi', 'bollinger', 'kdj', 'sar', 'obv', 'dmi', 'cci', 'wr', 'ma5', 'ma10', 'ma20', 'ma60'], + }) + @IsOptional() + @IsArray() + @IsString({ each: true }) + indicators?: IndicatorType[]; +} diff --git a/app/server/src/indicators/indicators.controller.ts b/app/server/src/indicators/indicators.controller.ts new file mode 100644 index 0000000..685ac8c --- /dev/null +++ b/app/server/src/indicators/indicators.controller.ts @@ -0,0 +1,98 @@ +import { Controller, Get, Param, Query } from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger'; +import { IndicatorsService } from './indicators.service'; +import { GetIndicatorsDto } from './dto/indicator.dto'; + +@ApiTags('技术指标') +@Controller('indicators') +export class IndicatorsController { + constructor(private readonly indicatorsService: IndicatorsService) {} + + @Get(':symbol') + @ApiOperation({ summary: '获取技术指标' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + @ApiResponse({ status: 200, description: '获取成功' }) + async getIndicators( + @Param('symbol') symbol: string, + @Query() dto: GetIndicatorsDto, + ) { + const results = await this.indicatorsService.calculateAllIndicators( + symbol, + dto.period, + ); + + // 如果指定了特定指标,只返回这些指标 + if (dto.indicators && dto.indicators.length > 0) { + const filtered: any = {}; + dto.indicators.forEach((ind) => { + if (results[ind]) { + filtered[ind] = results[ind]; + } + }); + return filtered; + } + + return results; + } + + @Get(':symbol/macd') + @ApiOperation({ summary: '获取MACD指标' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + async getMACD( + @Param('symbol') symbol: string, + @Query('period') period: string = '1d', + ) { + const klineData = await this.indicatorsService['marketService'].getKlineData( + symbol, + period, + 200, + ); + return this.indicatorsService.calculateMACD(klineData); + } + + @Get(':symbol/rsi') + @ApiOperation({ summary: '获取RSI指标' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + async getRSI( + @Param('symbol') symbol: string, + @Query('period') period: string = '1d', + @Query('rsiPeriod') rsiPeriod: number = 14, + ) { + const klineData = await this.indicatorsService['marketService'].getKlineData( + symbol, + period, + 200, + ); + return this.indicatorsService.calculateRSI(klineData, rsiPeriod); + } + + @Get(':symbol/bollinger') + @ApiOperation({ summary: '获取布林带指标' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + async getBollinger( + @Param('symbol') symbol: string, + @Query('period') period: string = '1d', + ) { + const klineData = await this.indicatorsService['marketService'].getKlineData( + symbol, + period, + 200, + ); + return this.indicatorsService.calculateBollinger(klineData); + } + + @Get(':symbol/kdj') + @ApiOperation({ summary: '获取KDJ指标' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + async getKDJ( + @Param('symbol') symbol: string, + @Query('period') period: string = '1d', + ) { + const klineData = await this.indicatorsService['marketService'].getKlineData( + symbol, + period, + 200, + ); + return this.indicatorsService.calculateKDJ(klineData); + } +} diff --git a/app/server/src/indicators/indicators.module.ts b/app/server/src/indicators/indicators.module.ts new file mode 100644 index 0000000..e79653b --- /dev/null +++ b/app/server/src/indicators/indicators.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { IndicatorsController } from './indicators.controller'; +import { IndicatorsService } from './indicators.service'; +import { MarketModule } from '../market/market.module'; + +@Module({ + imports: [MarketModule], + controllers: [IndicatorsController], + providers: [IndicatorsService], + exports: [IndicatorsService], +}) +export class IndicatorsModule {} diff --git a/app/server/src/indicators/indicators.service.ts b/app/server/src/indicators/indicators.service.ts new file mode 100644 index 0000000..e315f66 --- /dev/null +++ b/app/server/src/indicators/indicators.service.ts @@ -0,0 +1,392 @@ +import { Injectable } from '@nestjs/common'; +import { MarketService } from '../market/market.service'; +import { KLineData } from '../market/interfaces/market.interface'; +import { + MACDResult, + RSIResult, + BollingerResult, + KDJResult, + SARResult, + OBVResult, + DMIResult, + CCIResult, + WRResult, + IndicatorResults, +} from './interfaces/indicator.interface'; + +@Injectable() +export class IndicatorsService { + constructor(private readonly marketService: MarketService) {} + + // 计算MACD + calculateMACD( + klineData: KLineData[], + fastPeriod = 12, + slowPeriod = 26, + signalPeriod = 9, + ): MACDResult[] { + const closes = klineData.map((k) => k.close); + const ema12 = this.calculateEMA(closes, fastPeriod); + const ema26 = this.calculateEMA(closes, slowPeriod); + + const dif = ema12.map((v, i) => v - ema26[i]); + const dea = this.calculateEMA(dif, signalPeriod); + const macd = dif.map((v, i) => (v - dea[i]) * 2); + + return klineData.map((k, i) => ({ + time: k.time, + dif: Number(dif[i].toFixed(4)), + dea: Number(dea[i].toFixed(4)), + macd: Number(macd[i].toFixed(4)), + })); + } + + // 计算RSI + calculateRSI(klineData: KLineData[], period = 14): RSIResult[] { + const closes = klineData.map((k) => k.close); + const rsi = this.calculateRSIValues(closes, period); + + return klineData.map((k, i) => ({ + time: k.time, + value: Number(rsi[i].toFixed(2)), + status: this.getRSIStatus(rsi[i]), + })); + } + + // 计算布林带 + calculateBollinger( + klineData: KLineData[], + period = 20, + stdDev = 2, + ): BollingerResult[] { + const closes = klineData.map((k) => k.close); + const results: BollingerResult[] = []; + + for (let i = period - 1; i < closes.length; i++) { + const slice = closes.slice(i - period + 1, i + 1); + const middle = this.calculateSMA(slice, period); + const std = this.calculateStdDev(slice, middle); + const upper = middle + stdDev * std; + const lower = middle - stdDev * std; + const currentPrice = closes[i]; + + results.push({ + time: klineData[i].time, + upper: Number(upper.toFixed(2)), + middle: Number(middle.toFixed(2)), + lower: Number(lower.toFixed(2)), + position: currentPrice > upper ? 'upper' : currentPrice < lower ? 'lower' : 'middle', + }); + } + + return results; + } + + // 计算KDJ + calculateKDJ(klineData: KLineData[], n = 9, m1 = 3, m2 = 3): KDJResult[] { + const highs = klineData.map((k) => k.high); + const lows = klineData.map((k) => k.low); + const closes = klineData.map((k) => k.close); + + const rsv: number[] = []; + const k: number[] = []; + const d: number[] = []; + + for (let i = 0; i < closes.length; i++) { + if (i < n - 1) { + rsv.push(50); + k.push(50); + d.push(50); + continue; + } + + const periodHighs = highs.slice(i - n + 1, i + 1); + const periodLows = lows.slice(i - n + 1, i + 1); + const highest = Math.max(...periodHighs); + const lowest = Math.min(...periodLows); + + const rsvValue = highest === lowest ? 50 : ((closes[i] - lowest) / (highest - lowest)) * 100; + rsv.push(rsvValue); + + const kValue = (2 / 3) * (k[i - 1] || 50) + (1 / 3) * rsvValue; + k.push(kValue); + + const dValue = (2 / 3) * (d[i - 1] || 50) + (1 / 3) * kValue; + d.push(dValue); + } + + const j = k.map((kv, i) => 3 * kv - 2 * d[i]); + + return klineData.map((kline, i) => ({ + time: kline.time, + k: Number(k[i].toFixed(2)), + d: Number(d[i].toFixed(2)), + j: Number(j[i].toFixed(2)), + signal: this.getKDJSignal(k[i], d[i], k[i - 1], d[i - 1]), + })); + } + + // 计算SAR (抛物线转向) + calculateSAR(klineData: KLineData[], af = 0.02, maxAf = 0.2): SARResult[] { + const highs = klineData.map((k) => k.high); + const lows = klineData.map((k) => k.low); + const results: SARResult[] = []; + + let isLong = true; + let sar = lows[0]; + let ep = highs[0]; + let afValue = af; + + for (let i = 1; i < klineData.length; i++) { + sar = sar + afValue * (ep - sar); + + if (isLong) { + if (lows[i] < sar) { + isLong = false; + sar = ep; + ep = lows[i]; + afValue = af; + } else { + if (highs[i] > ep) { + ep = highs[i]; + afValue = Math.min(afValue + af, maxAf); + } + } + } else { + if (highs[i] > sar) { + isLong = true; + sar = ep; + ep = highs[i]; + afValue = af; + } else { + if (lows[i] < ep) { + ep = lows[i]; + afValue = Math.min(afValue + af, maxAf); + } + } + } + + results.push({ + time: klineData[i].time, + value: Number(sar.toFixed(2)), + isLong, + }); + } + + return results; + } + + // 计算OBV + calculateOBV(klineData: KLineData[]): OBVResult[] { + const obv: number[] = [0]; + + for (let i = 1; i < klineData.length; i++) { + const prevClose = klineData[i - 1].close; + const currentClose = klineData[i].close; + const volume = klineData[i].volume; + + if (currentClose > prevClose) { + obv.push(obv[i - 1] + volume); + } else if (currentClose < prevClose) { + obv.push(obv[i - 1] - volume); + } else { + obv.push(obv[i - 1]); + } + } + + return klineData.map((k, i) => ({ + time: k.time, + value: obv[i], + })); + } + + // 计算DMI + calculateDMI(klineData: KLineData[], period = 14): DMIResult[] { + const highs = klineData.map((k) => k.high); + const lows = klineData.map((k) => k.low); + const closes = klineData.map((k) => k.close); + + const tr: number[] = []; + const plusDM: number[] = []; + const minusDM: number[] = []; + + for (let i = 1; i < klineData.length; i++) { + const highDiff = highs[i] - highs[i - 1]; + const lowDiff = lows[i - 1] - lows[i]; + + tr.push(Math.max( + highs[i] - lows[i], + Math.abs(highs[i] - closes[i - 1]), + Math.abs(lows[i] - closes[i - 1]), + )); + + plusDM.push(highDiff > lowDiff && highDiff > 0 ? highDiff : 0); + minusDM.push(lowDiff > highDiff && lowDiff > 0 ? lowDiff : 0); + } + + const atr = this.calculateEMA(tr, period); + const plusDI = this.calculateEMA(plusDM, period).map((v, i) => (v / atr[i]) * 100); + const minusDI = this.calculateEMA(minusDM, period).map((v, i) => (v / atr[i]) * 100); + const dx = plusDI.map((v, i) => Math.abs(v - minusDI[i]) / (v + minusDI[i]) * 100); + const adx = this.calculateEMA(dx, period); + + return klineData.slice(1).map((k, i) => ({ + time: k.time, + plusDI: Number(plusDI[i].toFixed(2)), + minusDI: Number(minusDI[i].toFixed(2)), + adx: Number(adx[i].toFixed(2)), + })); + } + + // 计算CCI + calculateCCI(klineData: KLineData[], period = 14): CCIResult[] { + const results: CCIResult[] = []; + + for (let i = period - 1; i < klineData.length; i++) { + const tp = klineData.slice(i - period + 1, i + 1).map( + (k) => (k.high + k.low + k.close) / 3, + ); + const smaTP = tp.reduce((a, b) => a + b, 0) / period; + const meanDeviation = tp.reduce((a, b) => a + Math.abs(b - smaTP), 0) / period; + const cci = (tp[tp.length - 1] - smaTP) / (0.015 * meanDeviation); + + results.push({ + time: klineData[i].time, + value: Number(cci.toFixed(2)), + }); + } + + return results; + } + + // 计算WR (威廉指标) + calculateWR(klineData: KLineData[], period = 14): WRResult[] { + const results: WRResult[] = []; + + for (let i = period - 1; i < klineData.length; i++) { + const periodData = klineData.slice(i - period + 1, i + 1); + const highest = Math.max(...periodData.map((k) => k.high)); + const lowest = Math.min(...periodData.map((k) => k.low)); + const close = klineData[i].close; + + const wr = highest === lowest ? -50 : ((highest - close) / (highest - lowest)) * -100; + + results.push({ + time: klineData[i].time, + value: Number(wr.toFixed(2)), + }); + } + + return results; + } + + // 计算移动平均线 + calculateMA(klineData: KLineData[], period: number): { time: string; value: number }[] { + const closes = klineData.map((k) => k.close); + const ma = this.calculateSMAArray(closes, period); + + return klineData.slice(period - 1).map((k, i) => ({ + time: k.time, + value: Number(ma[i].toFixed(2)), + })); + } + + // 获取所有指标 + async calculateAllIndicators( + symbol: string, + period: string, + ): Promise { + const klineData = await this.marketService.getKlineData(symbol, period, 200); + + return { + macd: this.calculateMACD(klineData), + rsi: this.calculateRSI(klineData), + bollinger: this.calculateBollinger(klineData), + kdj: this.calculateKDJ(klineData), + sar: this.calculateSAR(klineData), + obv: this.calculateOBV(klineData), + dmi: this.calculateDMI(klineData), + cci: this.calculateCCI(klineData), + wr: this.calculateWR(klineData), + ma5: this.calculateMA(klineData, 5), + ma10: this.calculateMA(klineData, 10), + ma20: this.calculateMA(klineData, 20), + ma60: this.calculateMA(klineData, 60), + }; + } + + // 辅助方法 + private calculateEMA(data: number[], period: number): number[] { + const k = 2 / (period + 1); + const ema: number[] = [data[0]]; + + for (let i = 1; i < data.length; i++) { + ema.push(data[i] * k + ema[i - 1] * (1 - k)); + } + + return ema; + } + + private calculateSMA(data: number[], period: number): number { + const sum = data.slice(-period).reduce((a, b) => a + b, 0); + return sum / period; + } + + private calculateSMAArray(data: number[], period: number): number[] { + const sma: number[] = []; + for (let i = period - 1; i < data.length; i++) { + const sum = data.slice(i - period + 1, i + 1).reduce((a, b) => a + b, 0); + sma.push(sum / period); + } + return sma; + } + + private calculateStdDev(data: number[], mean: number): number { + const squareDiffs = data.map((value) => Math.pow(value - mean, 2)); + const avgSquareDiff = squareDiffs.reduce((a, b) => a + b, 0) / data.length; + return Math.sqrt(avgSquareDiff); + } + + private calculateRSIValues(closes: number[], period: number): number[] { + const gains: number[] = []; + const losses: number[] = []; + + for (let i = 1; i < closes.length; i++) { + const change = closes[i] - closes[i - 1]; + gains.push(change > 0 ? change : 0); + losses.push(change < 0 ? Math.abs(change) : 0); + } + + const rsi: number[] = []; + let avgGain = gains.slice(0, period).reduce((a, b) => a + b, 0) / period; + let avgLoss = losses.slice(0, period).reduce((a, b) => a + b, 0) / period; + + for (let i = period; i < gains.length; i++) { + avgGain = (avgGain * (period - 1) + gains[i]) / period; + avgLoss = (avgLoss * (period - 1) + losses[i]) / period; + + const rs = avgGain / avgLoss; + rsi.push(100 - 100 / (1 + rs)); + } + + // 填充前面的数据 + return [...Array(period).fill(50), ...rsi]; + } + + private getRSIStatus(rsi: number): 'overbought' | 'oversold' | 'normal' { + if (rsi > 70) return 'overbought'; + if (rsi < 30) return 'oversold'; + return 'normal'; + } + + private getKDJSignal( + k: number, + d: number, + prevK: number, + prevD: number, + ): 'golden_cross' | 'dead_cross' | 'neutral' { + if (prevK < prevD && k > d) return 'golden_cross'; + if (prevK > prevD && k < d) return 'dead_cross'; + return 'neutral'; + } +} diff --git a/app/server/src/indicators/interfaces/indicator.interface.ts b/app/server/src/indicators/interfaces/indicator.interface.ts new file mode 100644 index 0000000..f71ad9a --- /dev/null +++ b/app/server/src/indicators/interfaces/indicator.interface.ts @@ -0,0 +1,92 @@ +export interface MACDResult { + time: string; + dif: number; + dea: number; + macd: number; +} + +export interface RSIResult { + time: string; + value: number; + status: 'overbought' | 'oversold' | 'normal'; +} + +export interface BollingerResult { + time: string; + upper: number; + middle: number; + lower: number; + position: 'upper' | 'middle' | 'lower'; +} + +export interface KDJResult { + time: string; + k: number; + d: number; + j: number; + signal: 'golden_cross' | 'dead_cross' | 'neutral'; +} + +export interface SARResult { + time: string; + value: number; + isLong: boolean; +} + +export interface OBVResult { + time: string; + value: number; +} + +export interface DMIResult { + time: string; + plusDI: number; + minusDI: number; + adx: number; +} + +export interface CCIResult { + time: string; + value: number; +} + +export interface WRResult { + time: string; + value: number; +} + +export interface MAResult { + time: string; + value: number; +} + +export interface IndicatorResults { + macd: MACDResult[]; + rsi: RSIResult[]; + bollinger: BollingerResult[]; + kdj: KDJResult[]; + sar: SARResult[]; + obv: OBVResult[]; + dmi: DMIResult[]; + cci: CCIResult[]; + wr: WRResult[]; + ma5: MAResult[]; + ma10: MAResult[]; + ma20: MAResult[]; + ma60: MAResult[]; +} + +export type IndicatorType = + | 'macd' + | 'rsi' + | 'bollinger' + | 'kdj' + | 'sar' + | 'obv' + | 'dmi' + | 'cci' + | 'wr' + | 'ma5' + | 'ma10' + | 'ma20' + | 'ma60'; diff --git a/app/server/src/main.ts b/app/server/src/main.ts new file mode 100644 index 0000000..8040a75 --- /dev/null +++ b/app/server/src/main.ts @@ -0,0 +1,81 @@ +import { NestFactory } from '@nestjs/core'; +import { ValidationPipe, VersioningType } from '@nestjs/common'; +import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; +import { ConfigService } from '@nestjs/config'; +import helmet from 'helmet'; +import * as compression from 'compression'; +import { AppModule } from './app.module'; + +async function bootstrap() { + const app = await NestFactory.create(AppModule); + const configService = app.get(ConfigService); + + // 安全中间件 + app.use(helmet({ + contentSecurityPolicy: { + directives: { + defaultSrc: ["'self'"], + styleSrc: ["'self'", "'unsafe-inline'"], + scriptSrc: ["'self'"], + imgSrc: ["'self'", "data:", "https:"], + }, + }, + })); + + // 压缩响应 + app.use(compression()); + + // CORS配置 + app.enableCors({ + origin: configService.get('CORS_ORIGIN') || true, + credentials: true, + }); + + // API版本控制 + app.enableVersioning({ + type: VersioningType.URI, + defaultVersion: '1', + prefix: 'api/v', + }); + + // 全局验证管道 + app.useGlobalPipes(new ValidationPipe({ + whitelist: true, + forbidNonWhitelisted: true, + transform: true, + transformOptions: { + enableImplicitConversion: true, + }, + })); + + // API前缀 + app.setGlobalPrefix(configService.get('API_PREFIX') || 'api/v1'); + + // Swagger文档 + const config = new DocumentBuilder() + .setTitle('智能期货期权分析系统 API') + .setDescription('提供行情数据、技术分析、期权定价等功能的RESTful API') + .setVersion('1.0.0') + .addBearerAuth() + .addTag('认证', '用户登录注册') + .addTag('行情', '期货行情数据') + .addTag('指标', '技术分析指标') + .addTag('期权', '期权分析与定价') + .addTag('AI', '智能分析') + .addTag('事件', '热点事件') + .addTag('用户', '用户管理') + .build(); + + const document = SwaggerModule.createDocument(app, config); + SwaggerModule.setup('docs', app, document); + + // 启动服务器 + const port = configService.get('PORT') || 3000; + await app.listen(port); + + console.log(`🚀 服务已启动: http://localhost:${port}`); + console.log(`📚 API文档: http://localhost:${port}/docs`); + console.log(`📊 环境: ${configService.get('NODE_ENV')}`); +} + +bootstrap(); diff --git a/app/server/src/market/dto/market.dto.ts b/app/server/src/market/dto/market.dto.ts new file mode 100644 index 0000000..21b8048 --- /dev/null +++ b/app/server/src/market/dto/market.dto.ts @@ -0,0 +1,50 @@ +import { IsString, IsOptional, IsInt, Min, Max, IsEnum } from 'class-validator'; +import { Type } from 'class-transformer'; +import { ApiProperty } from '@nestjs/swagger'; + +export class GetProductsDto { + @ApiProperty({ required: false, description: '品种分类' }) + @IsOptional() + @IsString() + category?: string; + + @ApiProperty({ required: false, default: 1, description: '页码' }) + @IsOptional() + @Type(() => Number) + @IsInt() + @Min(1) + page?: number = 1; + + @ApiProperty({ required: false, default: 20, description: '每页数量' }) + @IsOptional() + @Type(() => Number) + @IsInt() + @Min(1) + @Max(100) + size?: number = 20; +} + +export class GetKlineDto { + @ApiProperty({ description: '周期', enum: ['1m', '5m', '15m', '30m', '1h', '1d', '1w'] }) + @IsString() + @IsEnum(['1m', '5m', '15m', '30m', '1h', '1d', '1w']) + period: string; + + @ApiProperty({ required: false, default: 100, description: '返回条数' }) + @IsOptional() + @Type(() => Number) + @IsInt() + @Min(1) + @Max(1000) + count?: number = 100; + + @ApiProperty({ required: false, description: '开始时间 (ISO8601)' }) + @IsOptional() + @IsString() + startTime?: string; + + @ApiProperty({ required: false, description: '结束时间 (ISO8601)' }) + @IsOptional() + @IsString() + endTime?: string; +} diff --git a/app/server/src/market/guards/ws-jwt.guard.ts b/app/server/src/market/guards/ws-jwt.guard.ts new file mode 100644 index 0000000..2899ba6 --- /dev/null +++ b/app/server/src/market/guards/ws-jwt.guard.ts @@ -0,0 +1,46 @@ +import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; +import { JwtService } from '@nestjs/jwt'; +import { ConfigService } from '@nestjs/config'; +import { WsException } from '@nestjs/websockets'; + +@Injectable() +export class WsJwtGuard implements CanActivate { + constructor( + private readonly jwtService: JwtService, + private readonly configService: ConfigService, + ) {} + + async canActivate(context: ExecutionContext): Promise { + try { + const client = context.switchToWs().getClient(); + const token = this.extractToken(client); + + if (!token) { + throw new WsException('未提供认证令牌'); + } + + const payload = this.jwtService.verify(token, { + secret: this.configService.get('jwt.secret'), + }); + + // 将用户信息附加到客户端 + client.user = payload; + + return true; + } catch (error) { + throw new WsException('无效的认证令牌'); + } + } + + private extractToken(client: any): string | null { + // 从handshake auth中获取token + const auth = client.handshake?.auth?.token; + if (auth) return auth.replace('Bearer ', ''); + + // 从query中获取token + const token = client.handshake?.query?.token; + if (token) return token as string; + + return null; + } +} diff --git a/app/server/src/market/interfaces/market.interface.ts b/app/server/src/market/interfaces/market.interface.ts new file mode 100644 index 0000000..1a21567 --- /dev/null +++ b/app/server/src/market/interfaces/market.interface.ts @@ -0,0 +1,57 @@ +export interface Product { + id: string; + symbol: string; + name: string; + category: string; + price: number; + change: number; + changePercent: number; + open: number; + high: number; + low: number; + volume: number; + openInterest?: number; +} + +export interface KLineData { + time: string; + open: number; + high: number; + low: number; + close: number; + volume: number; +} + +export interface TickData { + symbol: string; + price: number; + change: number; + changePercent: number; + open: number; + high: number; + low: number; + volume: number; + openInterest?: number; + bidPrice?: number; + askPrice?: number; + bidVolume?: number; + askVolume?: number; + timestamp: number; +} + +export interface MarketOverview { + heatIndex: number; + heatChange: number; + upCount: number; + downCount: number; + capitalFlow: number; + volatilityIndex: number; + volatilityChange: number; +} + +export interface WebSocketMessage { + type: 'tick' | 'kline' | 'trade' | 'signal'; + symbol: string; + data: any; + timestamp: number; +} diff --git a/app/server/src/market/market-data-feed.service.ts b/app/server/src/market/market-data-feed.service.ts new file mode 100644 index 0000000..554bd42 --- /dev/null +++ b/app/server/src/market/market-data-feed.service.ts @@ -0,0 +1,188 @@ +import { Injectable, Logger, OnModuleInit, OnModuleDestroy } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { Cron, CronExpression } from '@nestjs/schedule'; +import { MarketService } from './market.service'; +import { MarketGateway } from './market.gateway'; +import { PrismaService } from '@common/prisma/prisma.service'; +import { TickData, KLineData } from './interfaces/market.interface'; + +@Injectable() +export class MarketDataFeedService implements OnModuleInit, OnModuleDestroy { + private readonly logger = new Logger(MarketDataFeedService.name); + private readonly mockSymbols = ['SC', 'AU', 'CU', 'AG', 'I', 'M', 'P', 'EC']; + private mockDataInterval: NodeJS.Timeout; + private isRunning = false; + + constructor( + private readonly configService: ConfigService, + private readonly marketService: MarketService, + private readonly marketGateway: MarketGateway, + private readonly prisma: PrismaService, + ) {} + + async onModuleInit() { + // 启动模拟数据feed + const provider = this.configService.get('marketData.provider'); + + if (provider === 'mock') { + this.startMockDataFeed(); + this.logger.log('📊 启动模拟行情数据服务'); + } else { + // TODO: 实现真实数据源连接 + this.logger.log(`📊 使用数据源: ${provider}`); + } + } + + onModuleDestroy() { + this.stopMockDataFeed(); + } + + // 启动模拟数据推送 + private startMockDataFeed() { + if (this.isRunning) return; + + this.isRunning = true; + const interval = this.configService.get('marketData.tickUpdateInterval') || 1000; + + this.mockDataInterval = setInterval(() => { + this.generateAndBroadcastMockData(); + }, interval); + } + + // 停止模拟数据推送 + private stopMockDataFeed() { + this.isRunning = false; + if (this.mockDataInterval) { + clearInterval(this.mockDataInterval); + } + } + + // 生成并广播模拟数据 + private async generateAndBroadcastMockData() { + for (const symbol of this.mockSymbols) { + try { + const tick = await this.generateMockTick(symbol); + + // 存储到Redis + await this.marketService.storeTickData(symbol, tick); + + // 广播给订阅的客户端 + this.marketGateway.broadcastTick(symbol, tick); + } catch (error) { + this.logger.error(`生成模拟数据失败 ${symbol}:`, error.message); + } + } + } + + // 定时推送市场概览 + @Cron(CronExpression.EVERY_30_SECONDS) + async broadcastMarketOverview() { + try { + const overview = await this.marketService.getMarketOverview(); + this.marketGateway.broadcastMarketOverview(overview); + } catch (error) { + this.logger.error('广播市场概览失败:', error.message); + } + } + + // 生成模拟Tick数据 + private async generateMockTick(symbol: string): Promise { + // 获取当前价格或生成基础价格 + const currentTick = await this.marketService.getTickData(symbol).catch(() => null); + let basePrice = 500; + + if (currentTick) { + basePrice = currentTick.price; + } else { + // 根据品种设置不同的基础价格 + const basePrices: Record = { + SC: 528.6, // 原油 + AU: 685.2, // 黄金 + CU: 80610, // 铜 + AG: 8250, // 白银 + I: 785.5, // 铁矿石 + M: 2985, // 豆粕 + P: 8750, // 棕榈油 + EC: 2150, // 集运指数 + }; + basePrice = basePrices[symbol] || 500; + } + + // 随机波动 (0.1% - 0.5%) + const volatility = basePrice * (0.001 + Math.random() * 0.004); + const change = (Math.random() - 0.5) * volatility; + const price = basePrice + change; + + return { + symbol, + price: Number(price.toFixed(2)), + change: Number(change.toFixed(2)), + changePercent: Number(((change / basePrice) * 100).toFixed(2)), + open: currentTick?.open || basePrice, + high: Math.max(currentTick?.high || price, price) * (1 + Math.random() * 0.001), + low: Math.min(currentTick?.low || price, price) * (1 - Math.random() * 0.001), + volume: Math.floor(Math.random() * 10000) + (currentTick?.volume || 0), + openInterest: Math.floor(Math.random() * 100000), + bidPrice: price - 0.1, + askPrice: price + 0.1, + bidVolume: Math.floor(Math.random() * 100), + askVolume: Math.floor(Math.random() * 100), + timestamp: Date.now(), + }; + } + + // 生成模拟K线数据 + async generateMockKline(symbol: string, period: string, count: number = 100): Promise { + const data: KLineData[] = []; + const product = await this.prisma.product.findUnique({ + where: { symbol }, + }); + + let basePrice = 500; + if (product) { + const tick = await this.marketService.getTickData(symbol); + basePrice = tick.price; + } + + const now = new Date(); + const periodMinutes = this.parsePeriod(period); + + for (let i = count; i >= 0; i--) { + const time = new Date(now.getTime() - i * periodMinutes * 60 * 1000); + const volatility = basePrice * 0.008; + const change = (Math.random() - 0.48) * volatility; + + const open = basePrice; + const close = basePrice + change; + const high = Math.max(open, close) + Math.random() * volatility * 0.5; + const low = Math.min(open, close) - Math.random() * volatility * 0.5; + const volume = Math.floor(Math.random() * 10000 + 5000); + + data.push({ + time: time.toISOString(), + open: Number(open.toFixed(2)), + high: Number(high.toFixed(2)), + low: Number(low.toFixed(2)), + close: Number(close.toFixed(2)), + volume, + }); + + basePrice = close; + } + + return data; + } + + private parsePeriod(period: string): number { + const periodMap: Record = { + '1m': 1, + '5m': 5, + '15m': 15, + '30m': 30, + '1h': 60, + '1d': 60 * 24, + '1w': 60 * 24 * 7, + }; + return periodMap[period] || 5; + } +} diff --git a/app/server/src/market/market.controller.ts b/app/server/src/market/market.controller.ts new file mode 100644 index 0000000..0b31d1c --- /dev/null +++ b/app/server/src/market/market.controller.ts @@ -0,0 +1,58 @@ +import { Controller, Get, Param, Query } from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiResponse, ApiParam } from '@nestjs/swagger'; +import { MarketService } from './market.service'; +import { GetProductsDto, GetKlineDto } from './dto/market.dto'; + +@ApiTags('行情') +@Controller('market') +export class MarketController { + constructor(private readonly marketService: MarketService) {} + + @Get('products') + @ApiOperation({ summary: '获取品种列表' }) + @ApiResponse({ status: 200, description: '获取成功' }) + async getProducts(@Query() dto: GetProductsDto) { + return this.marketService.getProducts(dto.category, dto.page, dto.size); + } + + @Get('products/:symbol') + @ApiOperation({ summary: '获取品种详情' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + @ApiResponse({ status: 200, description: '获取成功' }) + @ApiResponse({ status: 404, description: '品种不存在' }) + async getProduct(@Param('symbol') symbol: string) { + return this.marketService.getProduct(symbol); + } + + @Get('products/:symbol/kline') + @ApiOperation({ summary: '获取K线数据' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + @ApiResponse({ status: 200, description: '获取成功' }) + async getKline( + @Param('symbol') symbol: string, + @Query() dto: GetKlineDto, + ) { + return this.marketService.getKlineData( + symbol, + dto.period, + dto.count, + dto.startTime ? new Date(dto.startTime) : undefined, + dto.endTime ? new Date(dto.endTime) : undefined, + ); + } + + @Get('products/:symbol/tick') + @ApiOperation({ summary: '获取实时行情' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + @ApiResponse({ status: 200, description: '获取成功' }) + async getTick(@Param('symbol') symbol: string) { + return this.marketService.getTickData(symbol); + } + + @Get('overview') + @ApiOperation({ summary: '获取市场概览' }) + @ApiResponse({ status: 200, description: '获取成功' }) + async getOverview() { + return this.marketService.getMarketOverview(); + } +} diff --git a/app/server/src/market/market.gateway.ts b/app/server/src/market/market.gateway.ts new file mode 100644 index 0000000..545d207 --- /dev/null +++ b/app/server/src/market/market.gateway.ts @@ -0,0 +1,134 @@ +import { + WebSocketGateway, + WebSocketServer, + SubscribeMessage, + MessageBody, + ConnectedSocket, + OnGatewayConnection, + OnGatewayDisconnect, +} from '@nestjs/websockets'; +import { Server, Socket } from 'socket.io'; +import { Logger, UseGuards } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { MarketService } from './market.service'; +import { WsJwtGuard } from './guards/ws-jwt.guard'; + +interface SubscribeMessageData { + symbols: string[]; + channels: ('tick' | 'kline' | 'depth')[]; +} + +@WebSocketGateway({ + namespace: 'market', + cors: { + origin: '*', + }, +}) +export class MarketGateway implements OnGatewayConnection, OnGatewayDisconnect { + @WebSocketServer() + server: Server; + + private readonly logger = new Logger(MarketGateway.name); + private clientSubscriptions: Map> = new Map(); // clientId -> symbols + + constructor( + private readonly configService: ConfigService, + private readonly marketService: MarketService, + ) {} + + handleConnection(client: Socket) { + this.logger.log(`客户端连接: ${client.id}`); + this.clientSubscriptions.set(client.id, new Set()); + } + + handleDisconnect(client: Socket) { + this.logger.log(`客户端断开: ${client.id}`); + this.clientSubscriptions.delete(client.id); + } + + @SubscribeMessage('subscribe') + async handleSubscribe( + @MessageBody() data: SubscribeMessageData, + @ConnectedSocket() client: Socket, + ) { + const { symbols, channels } = data; + const subscriptions = this.clientSubscriptions.get(client.id) || new Set(); + + symbols.forEach((symbol) => { + subscriptions.add(symbol); + + // 加入品种房间 + client.join(`symbol:${symbol}`); + + // 根据频道加入对应房间 + channels.forEach((channel) => { + client.join(`${channel}:${symbol}`); + }); + }); + + this.clientSubscriptions.set(client.id, subscriptions); + + // 发送当前数据 + const ticks = await this.marketService.getBatchTicks(symbols); + + client.emit('subscribed', { + symbols, + channels, + initialData: ticks, + }); + + this.logger.log(`客户端 ${client.id} 订阅: ${symbols.join(', ')}`); + } + + @SubscribeMessage('unsubscribe') + handleUnsubscribe( + @MessageBody() data: { symbols: string[] }, + @ConnectedSocket() client: Socket, + ) { + const { symbols } = data; + const subscriptions = this.clientSubscriptions.get(client.id) || new Set(); + + symbols.forEach((symbol) => { + subscriptions.delete(symbol); + client.leave(`symbol:${symbol}`); + client.leave(`tick:${symbol}`); + client.leave(`kline:${symbol}`); + client.leave(`depth:${symbol}`); + }); + + this.clientSubscriptions.set(client.id, subscriptions); + client.emit('unsubscribed', { symbols }); + } + + // 广播Tick数据 + broadcastTick(symbol: string, data: any) { + this.server.to(`tick:${symbol}`).emit('tick', { + symbol, + data, + timestamp: Date.now(), + }); + } + + // 广播K线数据 + broadcastKline(symbol: string, period: string, data: any) { + this.server.to(`kline:${symbol}`).emit('kline', { + symbol, + period, + data, + timestamp: Date.now(), + }); + } + + // 广播市场概览 + broadcastMarketOverview(data: any) { + this.server.emit('market:overview', { + data, + timestamp: Date.now(), + }); + } + + // 获取在线客户端数量 + getConnectedClientsCount(): number { + return this.clientSubscriptions.size; + } +} diff --git a/app/server/src/market/market.module.ts b/app/server/src/market/market.module.ts new file mode 100644 index 0000000..21bb234 --- /dev/null +++ b/app/server/src/market/market.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { MarketController } from './market.controller'; +import { MarketService } from './market.service'; +import { MarketGateway } from './market.gateway'; +import { MarketDataFeedService } from './market-data-feed.service'; + +@Module({ + controllers: [MarketController], + providers: [MarketService, MarketGateway, MarketDataFeedService], + exports: [MarketService], +}) +export class MarketModule {} diff --git a/app/server/src/market/market.service.ts b/app/server/src/market/market.service.ts new file mode 100644 index 0000000..30a5c76 --- /dev/null +++ b/app/server/src/market/market.service.ts @@ -0,0 +1,257 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { PrismaService } from '@common/prisma/prisma.service'; +import { RedisService } from '@common/redis/redis.service'; +import { KLineData, TickData, MarketOverview, Product } from './interfaces/market.interface'; + +@Injectable() +export class MarketService { + constructor( + private readonly prisma: PrismaService, + private readonly redis: RedisService, + ) {} + + // 获取品种列表 + async getProducts(category?: string, page = 1, size = 20): Promise<{ list: Product[]; total: number }> { + const where = category && category !== 'all' ? { category } : {}; + + const [products, total] = await Promise.all([ + this.prisma.product.findMany({ + where, + skip: (page - 1) * size, + take: size, + orderBy: { id: 'asc' }, + }), + this.prisma.product.count({ where }), + ]); + + // 合并Redis中的实时数据 + const list = await Promise.all( + products.map(async (product) => { + const tick = await this.redis.getTick(product.symbol); + return this.mergeProductWithTick(product, tick); + }), + ); + + return { list, total }; + } + + // 获取单个品种详情 + async getProduct(symbol: string): Promise { + const product = await this.prisma.product.findUnique({ + where: { symbol: symbol.toUpperCase() }, + }); + + if (!product) { + throw new NotFoundException(`品种 ${symbol} 不存在`); + } + + const tick = await this.redis.getTick(product.symbol); + return this.mergeProductWithTick(product, tick); + } + + // 获取K线数据 + async getKlineData( + symbol: string, + period: string, + count = 100, + startTime?: Date, + endTime?: Date, + ): Promise { + const product = await this.prisma.product.findUnique({ + where: { symbol: symbol.toUpperCase() }, + }); + + if (!product) { + throw new NotFoundException(`品种 ${symbol} 不存在`); + } + + // 优先从Redis获取 + const cachedKlines = await this.redis.getKlines(symbol, period, count); + if (cachedKlines.length >= count / 2) { + return cachedKlines.map((k) => JSON.parse(k)).reverse(); + } + + // 从数据库查询 + const where: any = { + productId: product.id, + period, + }; + + if (startTime) { + where.time = { ...where.time, gte: startTime }; + } + if (endTime) { + where.time = { ...where.time, lte: endTime }; + } + + const klines = await this.prisma.klineData.findMany({ + where, + orderBy: { time: 'desc' }, + take: count, + }); + + return klines.reverse().map((k) => ({ + time: k.time.toISOString(), + open: Number(k.open), + high: Number(k.high), + low: Number(k.low), + close: Number(k.close), + volume: Number(k.volume), + })); + } + + // 获取实时Tick数据 + async getTickData(symbol: string): Promise { + const product = await this.prisma.product.findUnique({ + where: { symbol: symbol.toUpperCase() }, + }); + + if (!product) { + throw new NotFoundException(`品种 ${symbol} 不存在`); + } + + const tick = await this.redis.getTick(symbol); + + if (!tick || Object.keys(tick).length === 0) { + // 如果没有缓存数据,返回模拟数据 + return this.generateMockTick(product.symbol); + } + + return { + symbol: product.symbol, + price: parseFloat(tick.price) || 0, + change: parseFloat(tick.change) || 0, + changePercent: parseFloat(tick.changePercent) || 0, + open: parseFloat(tick.open) || 0, + high: parseFloat(tick.high) || 0, + low: parseFloat(tick.low) || 0, + volume: parseInt(tick.volume) || 0, + openInterest: tick.openInterest ? parseInt(tick.openInterest) : undefined, + bidPrice: tick.bidPrice ? parseFloat(tick.bidPrice) : undefined, + askPrice: tick.askPrice ? parseFloat(tick.askPrice) : undefined, + bidVolume: tick.bidVolume ? parseInt(tick.bidVolume) : undefined, + askVolume: tick.askVolume ? parseInt(tick.askVolume) : undefined, + timestamp: parseInt(tick.timestamp) || Date.now(), + }; + } + + // 获取市场概览 + async getMarketOverview(): Promise { + const products = await this.prisma.product.findMany(); + const ticks = await Promise.all( + products.map((p) => this.redis.getTick(p.symbol)), + ); + + const validTicks = ticks.filter((t) => t && t.price); + + let upCount = 0; + let downCount = 0; + let totalChange = 0; + let totalVolume = 0; + + validTicks.forEach((tick) => { + const change = parseFloat(tick.change) || 0; + if (change > 0) upCount++; + else if (change < 0) downCount++; + totalChange += Math.abs(change); + totalVolume += parseInt(tick.volume) || 0; + }); + + // 计算市场热度指数 (0-100) + const heatIndex = validTicks.length > 0 + ? Math.min(100, Math.max(0, 50 + (upCount - downCount) * 2)) + : 50; + + // 计算波动率指数 (基于涨跌幅标准差) + const volatilityIndex = validTicks.length > 0 + ? (totalChange / validTicks.length) * 10 + : 20; + + return { + heatIndex: Number(heatIndex.toFixed(1)), + heatChange: Number(((Math.random() - 0.5) * 10).toFixed(1)), + upCount, + downCount, + capitalFlow: Number((totalVolume / 10000).toFixed(1)), + volatilityIndex: Number(volatilityIndex.toFixed(1)), + volatilityChange: Number(((Math.random() - 0.5) * 5).toFixed(1)), + }; + } + + // 批量获取Tick数据 + async getBatchTicks(symbols: string[]): Promise> { + const result: Record = {}; + + await Promise.all( + symbols.map(async (symbol) => { + try { + result[symbol] = await this.getTickData(symbol); + } catch (error) { + // 忽略不存在的品种 + } + }), + ); + + return result; + } + + // 存储Tick数据 + async storeTickData(symbol: string, data: TickData): Promise { + await this.redis.setTick(symbol, { + price: data.price.toString(), + change: data.change.toString(), + changePercent: data.changePercent.toString(), + open: data.open.toString(), + high: data.high.toString(), + low: data.low.toString(), + volume: data.volume.toString(), + openInterest: data.openInterest?.toString(), + bidPrice: data.bidPrice?.toString(), + askPrice: data.askPrice?.toString(), + bidVolume: data.bidVolume?.toString(), + askVolume: data.askVolume?.toString(), + timestamp: data.timestamp.toString(), + }); + } + + // 存储K线数据 + async storeKlineData(symbol: string, period: string, data: KLineData): Promise { + await this.redis.addKline(symbol, period, JSON.stringify(data)); + } + + private mergeProductWithTick(product: any, tick: Record): Product { + const basePrice = 500; // 基础价格,实际应从历史数据获取 + + return { + id: product.id.toString(), + symbol: product.symbol, + name: product.name, + category: product.category, + price: tick.price ? parseFloat(tick.price) : basePrice, + change: tick.change ? parseFloat(tick.change) : 0, + changePercent: tick.changePercent ? parseFloat(tick.changePercent) : 0, + open: tick.open ? parseFloat(tick.open) : basePrice, + high: tick.high ? parseFloat(tick.high) : basePrice, + low: tick.low ? parseFloat(tick.low) : basePrice, + volume: tick.volume ? parseInt(tick.volume) : 0, + openInterest: tick.openInterest ? parseInt(tick.openInterest) : 0, + }; + } + + private generateMockTick(symbol: string): TickData { + const basePrice = 500; + const change = (Math.random() - 0.5) * 20; + + return { + symbol, + price: basePrice + change, + change, + changePercent: (change / basePrice) * 100, + open: basePrice, + high: basePrice + Math.abs(change) + 10, + low: basePrice - Math.abs(change) - 10, + volume: Math.floor(Math.random() * 100000), + timestamp: Date.now(), + }; + } +} diff --git a/app/server/src/options/dto/options.dto.ts b/app/server/src/options/dto/options.dto.ts new file mode 100644 index 0000000..b148a8a --- /dev/null +++ b/app/server/src/options/dto/options.dto.ts @@ -0,0 +1,59 @@ +import { IsString, IsNumber, IsEnum, IsOptional, IsDateString } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; + +export class OptionPricingDto { + @ApiProperty({ description: '标的资产代码' }) + @IsString() + underlying: string; + + @ApiProperty({ description: '行权价' }) + @IsNumber() + strike: number; + + @ApiProperty({ description: '到期日 (YYYY-MM-DD)' }) + @IsDateString() + expiry: string; + + @ApiProperty({ description: '期权类型', enum: ['call', 'put'] }) + @IsEnum(['call', 'put']) + type: 'call' | 'put'; + + @ApiProperty({ description: '标的资产价格', required: false }) + @IsOptional() + @IsNumber() + underlyingPrice?: number; + + @ApiProperty({ description: '波动率 (如 0.25 表示 25%)', required: false }) + @IsOptional() + @IsNumber() + volatility?: number; + + @ApiProperty({ description: '无风险利率 (如 0.025 表示 2.5%)', required: false }) + @IsOptional() + @IsNumber() + riskFreeRate?: number; +} + +export class GetOptionChainDto { + @ApiProperty({ description: '到期日 (YYYY-MM-DD)', required: false }) + @IsOptional() + @IsDateString() + expiry?: string; +} + +export class CalculateStrategyDto { + @ApiProperty({ description: '策略名称', example: 'long_call_spread' }) + @IsString() + strategy: string; + + @ApiProperty({ description: '标的资产代码' }) + @IsString() + underlying: string; + + @ApiProperty({ description: '到期日 (YYYY-MM-DD)' }) + @IsDateString() + expiry: string; + + @ApiProperty({ description: '行权价差', type: [Number] }) + strikes: number[]; +} diff --git a/app/server/src/options/interfaces/options.interface.ts b/app/server/src/options/interfaces/options.interface.ts new file mode 100644 index 0000000..9262878 --- /dev/null +++ b/app/server/src/options/interfaces/options.interface.ts @@ -0,0 +1,82 @@ +// 期权希腊值 +export interface Greeks { + delta: number; + gamma: number; + theta: number; + vega: number; + rho: number; +} + +// 期权定价结果 +export interface OptionPricingResult extends Greeks { + price: number; + impliedVol?: number; +} + +// 期权合约 +export interface OptionContract { + symbol: string; + underlying: string; + type: 'call' | 'put'; + strikePrice: number; + expiryDate: string; + price?: number; + iv?: number; + delta?: number; + gamma?: number; + theta?: number; + vega?: number; + rho?: number; + volume?: number; + openInterest?: number; +} + +// 期权链 +export interface OptionChain { + underlying: string; + underlyingPrice: number; + expiryDate: string; + strikes: number[]; + calls: OptionContract[]; + puts: OptionContract[]; +} + +// 波动率曲面数据点 +export interface VolatilityPoint { + strike: number; + expiry: string; + iv: number; +} + +// 波动率曲面 +export interface VolatilitySurface { + underlying: string; + points: VolatilityPoint[]; +} + +// 期权策略 +export interface OptionStrategy { + name: string; + description: string; + legs: StrategyLeg[]; + maxProfit?: number; + maxLoss?: number; + breakeven: number[]; +} + +export interface StrategyLeg { + type: 'call' | 'put'; + strike: number; + expiry: string; + position: 1 | -1; // 1 for buy, -1 for sell + quantity: number; +} + +// 策略盈亏分析 +export interface StrategyPayoff { + pricePoints: number[]; + payoffs: number[]; + maxProfit: number; + maxLoss: number; + breakeven: number[]; +} diff --git a/app/server/src/options/options.controller.ts b/app/server/src/options/options.controller.ts new file mode 100644 index 0000000..a3dd830 --- /dev/null +++ b/app/server/src/options/options.controller.ts @@ -0,0 +1,219 @@ +import { Controller, Get, Post, Body, Param, Query } from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger'; +import { OptionsService } from './options.service'; +import { OptionPricingDto, GetOptionChainDto, CalculateStrategyDto } from './dto/options.dto'; + +@ApiTags('期权分析') +@Controller('options') +export class OptionsController { + constructor(private readonly optionsService: OptionsService) {} + + @Post('pricing') + @ApiOperation({ summary: '期权定价计算 (Black-Scholes模型)' }) + @ApiResponse({ status: 200, description: '计算成功' }) + async calculatePricing(@Body() dto: OptionPricingDto) { + const underlyingPrice = dto.underlyingPrice || + await this.optionsService['marketService'].getTickData(dto.underlying) + .then(t => t.price); + + const T = this.calculateTimeToExpiry(dto.expiry); + const r = dto.riskFreeRate || 0.025; + const sigma = dto.volatility || 0.25; + + return this.optionsService.calculateBlackScholes( + underlyingPrice, + dto.strike, + T, + r, + sigma, + dto.type, + ); + } + + @Post('implied-vol') + @ApiOperation({ summary: '计算隐含波动率' }) + @ApiResponse({ status: 200, description: '计算成功' }) + async calculateIV( + @Body() dto: OptionPricingDto & { marketPrice: number }, + ) { + const underlyingPrice = dto.underlyingPrice || + await this.optionsService['marketService'].getTickData(dto.underlying) + .then(t => t.price); + + const T = this.calculateTimeToExpiry(dto.expiry); + const r = dto.riskFreeRate || 0.025; + + const iv = this.optionsService.calculateImpliedVolatility( + underlyingPrice, + dto.strike, + T, + r, + dto.marketPrice, + dto.type, + ); + + return { impliedVolatility: iv }; + } + + @Get('chain/:underlying') + @ApiOperation({ summary: '获取期权链' }) + @ApiParam({ name: 'underlying', description: '标的资产代码' }) + @ApiResponse({ status: 200, description: '获取成功' }) + async getOptionChain( + @Param('underlying') underlying: string, + @Query() dto: GetOptionChainDto, + ) { + return this.optionsService.getOptionChain(underlying, dto.expiry); + } + + @Get('volatility-surface/:underlying') + @ApiOperation({ summary: '获取波动率曲面' }) + @ApiParam({ name: 'underlying', description: '标的资产代码' }) + @ApiResponse({ status: 200, description: '获取成功' }) + async getVolatilitySurface(@Param('underlying') underlying: string) { + return this.optionsService.getVolatilitySurface(underlying); + } + + @Post('strategy/payoff') + @ApiOperation({ summary: '计算期权策略盈亏' }) + @ApiResponse({ status: 200, description: '计算成功' }) + async calculateStrategyPayoff(@Body() dto: { + underlying: string; + strategy: string; + legs: Array<{ + type: 'call' | 'put'; + strike: number; + position: 1 | -1; + }>; + expiry: string; + }) { + const underlyingData = await this.optionsService['marketService'] + .getTickData(dto.underlying); + const underlyingPrice = underlyingData.price; + + const T = this.calculateTimeToExpiry(dto.expiry); + const r = 0.025; + const sigma = 0.25; + + const strikes: number[] = []; + const optionPrices: number[] = []; + const quantities: number[] = []; + const types: ('call' | 'put')[] = []; + + for (const leg of dto.legs) { + const price = this.optionsService.calculateBlackScholes( + underlyingPrice, leg.strike, T, r, sigma, leg.type, + ).price; + + strikes.push(leg.strike); + optionPrices.push(price); + quantities.push(leg.position); + types.push(leg.type); + } + + return this.optionsService.calculateStrategyPayoff( + underlyingPrice, + strikes, + optionPrices, + quantities, + types, + ); + } + + @Get('strategies') + @ApiOperation({ summary: '获取常用期权策略' }) + @ApiResponse({ status: 200, description: '获取成功' }) + getCommonStrategies() { + return [ + { + id: 'long_call', + name: '买入看涨期权', + description: '看涨策略,风险有限,收益无限', + legs: [{ type: 'call', position: 1 }], + }, + { + id: 'long_put', + name: '买入看跌期权', + description: '看跌策略,风险有限,收益有限', + legs: [{ type: 'put', position: 1 }], + }, + { + id: 'covered_call', + name: '备兑看涨', + description: '持有标的资产同时卖出看涨期权', + legs: [{ type: 'call', position: -1 }], + }, + { + id: 'protective_put', + name: '保护性看跌', + description: '持有标的资产同时买入看跌期权', + legs: [{ type: 'put', position: 1 }], + }, + { + id: 'bull_call_spread', + name: '牛市看涨价差', + description: '买入低行权价看涨,卖出高行权价看涨', + legs: [ + { type: 'call', position: 1 }, + { type: 'call', position: -1 }, + ], + }, + { + id: 'bear_put_spread', + name: '熊市看跌价差', + description: '买入高行权价看跌,卖出低行权价看跌', + legs: [ + { type: 'put', position: 1 }, + { type: 'put', position: -1 }, + ], + }, + { + id: 'long_straddle', + name: '买入跨式', + description: '同时买入相同行权价的看涨和看跌', + legs: [ + { type: 'call', position: 1 }, + { type: 'put', position: 1 }, + ], + }, + { + id: 'short_strangle', + name: '卖出宽跨式', + description: '卖出不同行权价的看涨和看跌', + legs: [ + { type: 'call', position: -1 }, + { type: 'put', position: -1 }, + ], + }, + { + id: 'iron_condor', + name: '铁鹰式', + description: '卖出内侧期权,买入外侧期权', + legs: [ + { type: 'call', position: -1 }, + { type: 'call', position: 1 }, + { type: 'put', position: -1 }, + { type: 'put', position: 1 }, + ], + }, + { + id: 'butterfly', + name: '蝶式价差', + description: '买入低高价期权,卖出2份中间价期权', + legs: [ + { type: 'call', position: 1 }, + { type: 'call', position: -2 }, + { type: 'call', position: 1 }, + ], + }, + ]; + } + + private calculateTimeToExpiry(expiryDate: string): number { + const expiry = new Date(expiryDate); + const now = new Date(); + const diffTime = expiry.getTime() - now.getTime(); + const diffDays = diffTime / (1000 * 60 * 60 * 24); + return Math.max(diffDays / 365, 0.001); + } +} diff --git a/app/server/src/options/options.module.ts b/app/server/src/options/options.module.ts new file mode 100644 index 0000000..7455fde --- /dev/null +++ b/app/server/src/options/options.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { OptionsController } from './options.controller'; +import { OptionsService } from './options.service'; +import { MarketModule } from '../market/market.module'; + +@Module({ + imports: [MarketModule], + controllers: [OptionsController], + providers: [OptionsService], + exports: [OptionsService], +}) +export class OptionsModule {} diff --git a/app/server/src/options/options.service.ts b/app/server/src/options/options.service.ts new file mode 100644 index 0000000..dae9d7c --- /dev/null +++ b/app/server/src/options/options.service.ts @@ -0,0 +1,338 @@ +import { Injectable } from '@nestjs/common'; +import { MarketService } from '../market/market.service'; +import { + OptionPricingResult, + OptionContract, + OptionChain, + VolatilitySurface, + StrategyPayoff, +} from './interfaces/options.interface'; + +@Injectable() +export class OptionsService { + constructor(private readonly marketService: MarketService) {} + + /** + * Black-Scholes期权定价模型 + */ + calculateBlackScholes( + S: number, // 标的资产价格 + K: number, // 行权价 + T: number, // 到期时间(年) + r: number, // 无风险利率 + sigma: number, // 波动率 + type: 'call' | 'put', + ): OptionPricingResult { + const d1 = (Math.log(S / K) + (r + 0.5 * sigma * sigma) * T) / (sigma * Math.sqrt(T)); + const d2 = d1 - sigma * Math.sqrt(T); + + const nd1 = this.cumulativeNormalDistribution(d1); + const nd2 = this.cumulativeNormalDistribution(d2); + const nPd1 = this.normalProbabilityDensity(d1); + + let price: number; + let delta: number; + + if (type === 'call') { + price = S * nd1 - K * Math.exp(-r * T) * nd2; + delta = nd1; + } else { + price = K * Math.exp(-r * T) * (1 - nd2) - S * (1 - nd1); + delta = nd1 - 1; + } + + const gamma = nPd1 / (S * sigma * Math.sqrt(T)); + const theta = -(S * nPd1 * sigma) / (2 * Math.sqrt(T)) + - r * K * Math.exp(-r * T) * (type === 'call' ? nd2 : 1 - nd2); + const vega = S * Math.sqrt(T) * nPd1; + const rho = type === 'call' + ? K * T * Math.exp(-r * T) * nd2 + : -K * T * Math.exp(-r * T) * (1 - nd2); + + return { + price: Number(price.toFixed(4)), + delta: Number(delta.toFixed(4)), + gamma: Number(gamma.toFixed(4)), + theta: Number((theta / 365).toFixed(4)), // 转换为日值 + vega: Number((vega / 100).toFixed(4)), // 转换为1%波动率变化 + rho: Number((rho / 100).toFixed(4)), // 转换为1%利率变化 + }; + } + + /** + * 计算隐含波动率 (使用牛顿迭代法) + */ + calculateImpliedVolatility( + S: number, + K: number, + T: number, + r: number, + marketPrice: number, + type: 'call' | 'put', + ): number { + let sigma = 0.3; // 初始猜测值 + const tolerance = 0.0001; + const maxIterations = 100; + + for (let i = 0; i < maxIterations; i++) { + const result = this.calculateBlackScholes(S, K, T, r, sigma, type); + const priceDiff = result.price - marketPrice; + + if (Math.abs(priceDiff) < tolerance) { + return Number(sigma.toFixed(4)); + } + + // 使用vega作为导数 + const vega = result.vega * 100; // 转回原始值 + if (vega === 0) break; + + sigma = sigma - priceDiff / vega; + + // 限制波动率范围 + if (sigma <= 0) sigma = 0.01; + if (sigma > 5) sigma = 5; + } + + return Number(sigma.toFixed(4)); + } + + /** + * 获取期权链 + */ + async getOptionChain(underlying: string, expiry?: string): Promise { + const underlyingData = await this.marketService.getTickData(underlying); + const underlyingPrice = underlyingData.price; + + // 如果没有指定到期日,使用默认的(30天后) + const expiryDate = expiry || this.getDefaultExpiryDate(); + + // 生成行权价列表(基于标的资产价格上下波动20%) + const strikes = this.generateStrikes(underlyingPrice); + + const T = this.calculateTimeToExpiry(expiryDate); + const r = 0.025; // 默认无风险利率 2.5% + const sigma = 0.25; // 默认波动率 25% + + const calls: OptionContract[] = []; + const puts: OptionContract[] = []; + + for (const strike of strikes) { + const callResult = this.calculateBlackScholes( + underlyingPrice, strike, T, r, sigma, 'call', + ); + const putResult = this.calculateBlackScholes( + underlyingPrice, strike, T, r, sigma, 'put', + ); + + calls.push({ + symbol: `${underlying}${expiryDate.replace(/-/g, '')}C${strike}`, + underlying, + type: 'call', + strikePrice: strike, + expiryDate, + ...callResult, + iv: sigma, + volume: Math.floor(Math.random() * 1000), + openInterest: Math.floor(Math.random() * 5000), + }); + + puts.push({ + symbol: `${underlying}${expiryDate.replace(/-/g, '')}P${strike}`, + underlying, + type: 'put', + strikePrice: strike, + expiryDate, + ...putResult, + iv: sigma, + volume: Math.floor(Math.random() * 1000), + openInterest: Math.floor(Math.random() * 5000), + }); + } + + return { + underlying, + underlyingPrice, + expiryDate, + strikes, + calls, + puts, + }; + } + + /** + * 计算期权策略盈亏 + */ + calculateStrategyPayoff( + underlyingPrice: number, + strikes: number[], + optionPrices: number[], + quantities: number[], + types: ('call' | 'put')[], + ): StrategyPayoff { + const priceRange = 0.3; // 价格范围 ±30% + const steps = 50; + const minPrice = underlyingPrice * (1 - priceRange); + const maxPrice = underlyingPrice * (1 + priceRange); + const stepSize = (maxPrice - minPrice) / steps; + + const pricePoints: number[] = []; + const payoffs: number[] = []; + + for (let i = 0; i <= steps; i++) { + const price = minPrice + i * stepSize; + pricePoints.push(Number(price.toFixed(2))); + + let payoff = 0; + for (let j = 0; j < strikes.length; j++) { + const intrinsicValue = this.calculateIntrinsicValue( + price, strikes[j], types[j], + ); + payoff += (intrinsicValue - optionPrices[j]) * quantities[j]; + } + payoffs.push(Number(payoff.toFixed(2))); + } + + const maxProfit = Math.max(...payoffs); + const maxLoss = Math.min(...payoffs); + const breakeven = this.calculateBreakevenPoints(pricePoints, payoffs); + + return { + pricePoints, + payoffs, + maxProfit: maxProfit > 0 ? maxProfit : Infinity, + maxLoss: maxLoss < 0 ? maxLoss : -Infinity, + breakeven, + }; + } + + /** + * 获取波动率曲面 + */ + async getVolatilitySurface(underlying: string): Promise { + const underlyingData = await this.marketService.getTickData(underlying); + const price = underlyingData.price; + + const expiries = [ + this.getExpiryDate(30), + this.getExpiryDate(60), + this.getExpiryDate(90), + this.getExpiryDate(180), + ]; + + const points: any[] = []; + + for (const expiry of expiries) { + const strikes = this.generateStrikes(price, 0.15); + const T = this.calculateTimeToExpiry(expiry); + + for (const strike of strikes) { + // 模拟隐含波动率(实际应从市场数据获取) + const moneyness = strike / price; + const baseIV = 0.25; + const skew = (moneyness - 1) * 0.1; // 波动率偏斜 + const iv = baseIV + skew + (Math.random() - 0.5) * 0.02; + + points.push({ + strike, + expiry, + iv: Number(iv.toFixed(4)), + }); + } + } + + return { + underlying, + points, + }; + } + + // 辅助方法 + private cumulativeNormalDistribution(x: number): number { + const t = 1 / (1 + 0.2316419 * Math.abs(x)); + const d = 0.3989423 * Math.exp((-x * x) / 2); + const prob = + d * t * + (0.3193815 + + t * (-0.3565638 + + t * (1.781478 + + t * (-1.821256 + t * 1.330274)))); + + if (x > 0) { + return 1 - prob; + } + return prob; + } + + private normalProbabilityDensity(x: number): number { + return Math.exp((-x * x) / 2) / Math.sqrt(2 * Math.PI); + } + + private getDefaultExpiryDate(): string { + const date = new Date(); + date.setDate(date.getDate() + 30); + return date.toISOString().split('T')[0]; + } + + private getExpiryDate(daysFromNow: number): string { + const date = new Date(); + date.setDate(date.getDate() + daysFromNow); + return date.toISOString().split('T')[0]; + } + + private generateStrikes(underlyingPrice: number, range = 0.2): number[] { + const strikes: number[] = []; + const step = underlyingPrice * 0.05; // 5% 间隔 + const count = Math.floor((underlyingPrice * range) / step); + + for (let i = -count; i <= count; i++) { + const strike = underlyingPrice + i * step; + // 四舍五入到合理精度 + const roundedStrike = underlyingPrice > 1000 + ? Math.round(strike / 100) * 100 + : underlyingPrice > 100 + ? Math.round(strike / 10) * 10 + : Math.round(strike); + strikes.push(roundedStrike); + } + + return strikes.sort((a, b) => a - b); + } + + private calculateTimeToExpiry(expiryDate: string): number { + const expiry = new Date(expiryDate); + const now = new Date(); + const diffTime = expiry.getTime() - now.getTime(); + const diffDays = diffTime / (1000 * 60 * 60 * 24); + return Math.max(diffDays / 365, 0.001); // 最小0.001年 + } + + private calculateIntrinsicValue( + underlyingPrice: number, + strike: number, + type: 'call' | 'put', + ): number { + if (type === 'call') { + return Math.max(0, underlyingPrice - strike); + } else { + return Math.max(0, strike - underlyingPrice); + } + } + + private calculateBreakevenPoints(pricePoints: number[], payoffs: number[]): number[] { + const breakeven: number[] = []; + + for (let i = 1; i < payoffs.length; i++) { + if ((payoffs[i - 1] < 0 && payoffs[i] >= 0) || + (payoffs[i - 1] > 0 && payoffs[i] <= 0)) { + // 线性插值 + const ratio = Math.abs(payoffs[i - 1]) / + (Math.abs(payoffs[i - 1]) + Math.abs(payoffs[i])); + const breakevenPrice = pricePoints[i - 1] + + ratio * (pricePoints[i] - pricePoints[i - 1]); + breakeven.push(Number(breakevenPrice.toFixed(2))); + } + } + + return breakeven; + } +} diff --git a/app/server/src/user/user.controller.ts b/app/server/src/user/user.controller.ts new file mode 100644 index 0000000..6593d9c --- /dev/null +++ b/app/server/src/user/user.controller.ts @@ -0,0 +1,18 @@ +import { Controller, Get, UseGuards } from '@nestjs/common'; +import { ApiTags, ApiBearerAuth } from '@nestjs/swagger'; +import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; +import { CurrentUser } from '../auth/decorators/current-user.decorator'; +import { UserService } from './user.service'; + +@ApiTags('用户') +@Controller('user') +@UseGuards(JwtAuthGuard) +@ApiBearerAuth() +export class UserController { + constructor(private readonly userService: UserService) {} + + @Get('stats') + async getUserStats(@CurrentUser('userId') userId: number) { + return this.userService.getUserStats(userId); + } +} diff --git a/app/server/src/user/user.module.ts b/app/server/src/user/user.module.ts new file mode 100644 index 0000000..ca5060e --- /dev/null +++ b/app/server/src/user/user.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { UserController } from './user.controller'; +import { UserService } from './user.service'; + +@Module({ + controllers: [UserController], + providers: [UserService], + exports: [UserService], +}) +export class UserModule {} diff --git a/app/server/src/user/user.service.ts b/app/server/src/user/user.service.ts new file mode 100644 index 0000000..3a722e4 --- /dev/null +++ b/app/server/src/user/user.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@nestjs/common'; +import { PrismaService } from '@common/prisma/prisma.service'; + +@Injectable() +export class UserService { + constructor(private readonly prisma: PrismaService) {} + + async getUserStats(userId: number) { + const [watchlistCount, alertCount] = await Promise.all([ + this.prisma.watchlist.count({ where: { userId } }), + this.prisma.priceAlert.count({ where: { userId } }), + ]); + + return { + watchlistCount, + alertCount, + }; + } +} diff --git a/app/server/src/watchlist/watchlist.controller.ts b/app/server/src/watchlist/watchlist.controller.ts new file mode 100644 index 0000000..e2044b6 --- /dev/null +++ b/app/server/src/watchlist/watchlist.controller.ts @@ -0,0 +1,68 @@ +import { + Controller, + Get, + Post, + Delete, + Put, + Body, + Param, + Query, + UseGuards, +} from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiBearerAuth, ApiParam } from '@nestjs/swagger'; +import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; +import { CurrentUser } from '../auth/decorators/current-user.decorator'; +import { WatchlistService } from './watchlist.service'; + +@ApiTags('自选股') +@Controller('watchlist') +@UseGuards(JwtAuthGuard) +@ApiBearerAuth() +export class WatchlistController { + constructor(private readonly watchlistService: WatchlistService) {} + + @Get() + @ApiOperation({ summary: '获取自选股列表' }) + async getWatchlist(@CurrentUser('userId') userId: number) { + return this.watchlistService.getWatchlist(userId); + } + + @Post() + @ApiOperation({ summary: '添加自选股' }) + async addToWatchlist( + @CurrentUser('userId') userId: number, + @Body() dto: { symbol: string; alertPrice?: number }, + ) { + return this.watchlistService.addToWatchlist( + userId, + dto.symbol, + dto.alertPrice, + ); + } + + @Delete(':symbol') + @ApiOperation({ summary: '删除自选股' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + async removeFromWatchlist( + @CurrentUser('userId') userId: number, + @Param('symbol') symbol: string, + ) { + await this.watchlistService.removeFromWatchlist(userId, symbol); + return { message: '删除成功' }; + } + + @Put(':symbol/alert') + @ApiOperation({ summary: '更新价格预警' }) + @ApiParam({ name: 'symbol', description: '品种代码' }) + async updateAlertPrice( + @CurrentUser('userId') userId: number, + @Param('symbol') symbol: string, + @Body() dto: { alertPrice: number }, + ) { + return this.watchlistService.updateAlertPrice( + userId, + symbol, + dto.alertPrice, + ); + } +} diff --git a/app/server/src/watchlist/watchlist.module.ts b/app/server/src/watchlist/watchlist.module.ts new file mode 100644 index 0000000..594ad1d --- /dev/null +++ b/app/server/src/watchlist/watchlist.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { WatchlistController } from './watchlist.controller'; +import { WatchlistService } from './watchlist.service'; +import { MarketModule } from '../market/market.module'; + +@Module({ + imports: [MarketModule], + controllers: [WatchlistController], + providers: [WatchlistService], + exports: [WatchlistService], +}) +export class WatchlistModule {} diff --git a/app/server/src/watchlist/watchlist.service.ts b/app/server/src/watchlist/watchlist.service.ts new file mode 100644 index 0000000..87efcef --- /dev/null +++ b/app/server/src/watchlist/watchlist.service.ts @@ -0,0 +1,149 @@ +import { Injectable, NotFoundException, ConflictException } from '@nestjs/common'; +import { PrismaService } from '@common/prisma/prisma.service'; +import { MarketService } from '../market/market.service'; + +export interface WatchlistItem { + id: string; + symbol: string; + name: string; + price: number; + change: number; + changePercent: number; + alertPrice?: number; + addTime: string; +} + +@Injectable() +export class WatchlistService { + constructor( + private readonly prisma: PrismaService, + private readonly marketService: MarketService, + ) {} + + async getWatchlist(userId: number): Promise { + const items = await this.prisma.watchlist.findMany({ + where: { userId }, + orderBy: { createdAt: 'desc' }, + }); + + const result: WatchlistItem[] = []; + + for (const item of items) { + try { + const product = await this.marketService.getProduct(item.symbol); + result.push({ + id: item.id.toString(), + symbol: item.symbol, + name: product.name, + price: product.price, + change: product.change, + changePercent: product.changePercent, + alertPrice: item.alertPrice ? Number(item.alertPrice) : undefined, + addTime: item.createdAt.toISOString(), + }); + } catch (error) { + // 如果品种不存在,跳过 + } + } + + return result; + } + + async addToWatchlist( + userId: number, + symbol: string, + alertPrice?: number, + ): Promise { + // 检查品种是否存在 + const product = await this.marketService.getProduct(symbol); + + // 检查是否已存在 + const existing = await this.prisma.watchlist.findUnique({ + where: { + userId_symbol: { + userId, + symbol: symbol.toUpperCase(), + }, + }, + }); + + if (existing) { + throw new ConflictException('该品种已在自选股中'); + } + + const item = await this.prisma.watchlist.create({ + data: { + userId, + symbol: symbol.toUpperCase(), + alertPrice: alertPrice || null, + }, + }); + + return { + id: item.id.toString(), + symbol: item.symbol, + name: product.name, + price: product.price, + change: product.change, + changePercent: product.changePercent, + alertPrice: item.alertPrice ? Number(item.alertPrice) : undefined, + addTime: item.createdAt.toISOString(), + }; + } + + async removeFromWatchlist(userId: number, symbol: string): Promise { + const item = await this.prisma.watchlist.findUnique({ + where: { + userId_symbol: { + userId, + symbol: symbol.toUpperCase(), + }, + }, + }); + + if (!item) { + throw new NotFoundException('该品种不在自选股中'); + } + + await this.prisma.watchlist.delete({ + where: { id: item.id }, + }); + } + + async updateAlertPrice( + userId: number, + symbol: string, + alertPrice: number, + ): Promise { + const item = await this.prisma.watchlist.findUnique({ + where: { + userId_symbol: { + userId, + symbol: symbol.toUpperCase(), + }, + }, + }); + + if (!item) { + throw new NotFoundException('该品种不在自选股中'); + } + + const updated = await this.prisma.watchlist.update({ + where: { id: item.id }, + data: { alertPrice }, + }); + + const product = await this.marketService.getProduct(symbol); + + return { + id: updated.id.toString(), + symbol: updated.symbol, + name: product.name, + price: product.price, + change: product.change, + changePercent: product.changePercent, + alertPrice: updated.alertPrice ? Number(updated.alertPrice) : undefined, + addTime: updated.createdAt.toISOString(), + }; + } +} diff --git a/app/server/tsconfig.json b/app/server/tsconfig.json new file mode 100644 index 0000000..c7f31ad --- /dev/null +++ b/app/server/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "ES2021", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + "noFallthroughCasesInSwitch": false, + "paths": { + "@/*": ["src/*"], + "@config/*": ["src/config/*"], + "@common/*": ["src/common/*"] + } + } +} diff --git a/app/src/App.css b/app/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/app/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/app/src/App.tsx b/app/src/App.tsx new file mode 100644 index 0000000..39ecf13 --- /dev/null +++ b/app/src/App.tsx @@ -0,0 +1,353 @@ +import { useState, useEffect } from 'react'; +import { Navbar } from '@/components/Navbar'; +import { MarketOverviewPanel } from '@/components/MarketOverview'; +import { HotEventsPanel } from '@/components/HotEvents'; +import { ProductCard } from '@/components/ProductCard'; +import { ProductDetail } from '@/components/ProductDetail'; +import { RiskAlertsPanel } from '@/components/RiskAlerts'; +import { marketOverview, hotEvents, futuresProducts, riskAlerts } from '@/data/mockData'; +import { Filter, Search, TrendingUp, TrendingDown, Grid3X3, List } from 'lucide-react'; +import type { FuturesProduct } from '@/types'; + +// 视图类型 + type ViewType = 'grid' | 'list'; + +// 周期筛选选项 (预留用于后续扩展) +// const cycleFilters = [ +// { key: 'all', label: '全部' }, +// { key: 'm5', label: '5分钟' }, +// { key: 'm15', label: '15分钟' }, +// { key: 'm30', label: '30分钟' }, +// { key: 'm60', label: '60分钟' }, +// ]; + +// 品种分类 +const categoryFilters = [ + { key: 'all', label: '全部' }, + { key: 'energy', label: '能源' }, + { key: 'metal', label: '金属' }, + { key: 'agriculture', label: '农产品' }, + { key: 'financial', label: '金融' }, +]; + +// 排序选项 +const sortOptions = [ + { key: 'successRate', label: '成功率' }, + { key: 'trendScore', label: '趋势强度' }, + { key: 'changePercent', label: '涨跌幅' }, +]; + +function App() { + const [activeTab, setActiveTab] = useState('overview'); + const [selectedProduct, setSelectedProduct] = useState(null); + const [viewType, setViewType] = useState('grid'); + + // 筛选状态 + const [categoryFilter, setCategoryFilter] = useState('all'); + // const [cycleFilter, setCycleFilter] = useState('all'); // 预留用于周期筛选 + const [sortBy, setSortBy] = useState('successRate'); + const [searchQuery, setSearchQuery] = useState(''); + + // 筛选和排序品种 + const filteredProducts = futuresProducts + .filter((product) => { + // 分类筛选 + if (categoryFilter !== 'all' && product.category !== categoryFilter) { + return false; + } + // 搜索筛选 + if (searchQuery && !product.name.includes(searchQuery) && !product.code.includes(searchQuery)) { + return false; + } + return true; + }) + .sort((a, b) => { + // 排序 + if (sortBy === 'successRate') { + return b.successRate - a.successRate; + } else if (sortBy === 'trendScore') { + return b.trendScore - a.trendScore; + } else if (sortBy === 'changePercent') { + return b.changePercent - a.changePercent; + } + return 0; + }); + + // 页面加载动画 + const [isLoaded, setIsLoaded] = useState(false); + useEffect(() => { + setIsLoaded(true); + }, []); + + // 渲染市场概览页面 + const renderOverview = () => ( +
+
+

市场概览

+ 实时数据更新 +
+ + + +
+
+ +
+
+ +
+
+
+ ); + + // 渲染热点事件页面 + const renderEvents = () => ( +
+
+

热点事件智能分析

+ 共 {hotEvents.length} 条事件 +
+ +
+ ); + + // 渲染品种分析页面 + const renderProducts = () => ( +
+ {selectedProduct ? ( + setSelectedProduct(null)} + /> + ) : ( + <> + {/* 筛选工具栏 */} +
+
+ {/* 搜索 */} +
+ + setSearchQuery(e.target.value)} + className="w-full pl-10 pr-4 py-2 rounded-lg bg-[#09090b] border border-[#27272a] text-white text-sm placeholder:text-[#71717a] focus:outline-none focus:border-[#7dd75a] transition-colors" + /> +
+ + {/* 视图切换 */} +
+ + +
+
+ +
+ {/* 分类筛选 */} +
+ + 分类: +
+ {categoryFilters.map((filter) => ( + + ))} +
+
+ + {/* 排序 */} +
+ 排序: + +
+
+
+ + {/* 结果统计 */} +
+
+ + 共 {filteredProducts.length} 个品种 + +
+ + + {filteredProducts.filter(p => p.change >= 0).length} + + + + {filteredProducts.filter(p => p.change < 0).length} + +
+
+
+ + {/* 品种列表 */} + {viewType === 'grid' ? ( +
+ {filteredProducts.map((product) => ( + setSelectedProduct(product)} + /> + ))} +
+ ) : ( +
+ {filteredProducts.map((product) => ( +
setSelectedProduct(product)} + className="p-4 rounded-xl border border-[#27272a] bg-[#0d0d10] hover:border-[#7dd75a]/50 transition-all cursor-pointer" + > +
+
+
+
{product.name}
+
{product.code}
+
+
+ {Object.entries(product.cycles).map(([key, trend]) => ( + + {key === 'm5' ? '5分' : key === 'm15' ? '15分' : key === 'm30' ? '30分' : '60分'} + + ))} +
+
+
+
= 0 ? 'text-[#7dd75a]' : 'text-[#ef4444]'}`}> + ¥{product.price.toLocaleString()} +
+
= 0 ? 'text-[#7dd75a]' : 'text-[#ef4444]'}`}> + {product.change >= 0 ? '+' : ''}{product.changePercent}% +
+
+
+
+ ))} +
+ )} + + {filteredProducts.length === 0 && ( +
+
未找到匹配的品种
+ +
+ )} + + )} +
+ ); + + // 渲染风险提醒页面 + const renderRisks = () => ( +
+
+

风险提醒

+ 实时监控 +
+ +
+ + +
+

风险控制建议

+
+
+
+
+ 高风险环境 +
+

+ 当前地缘政治风险急剧升温,建议控制仓位在30%以下,设置严格止损。 +

+
+ +
+
+
+ 持仓管理 +
+

+ 避免隔夜重仓,特别是原油、黄金等波动较大的品种。建议日内交易为主。 +

+
+ +
+
+
+ 机会提示 +
+

+ 黄金、原油趋势明确,可关注回调后的做多机会。严格设置止损。 +

+
+
+
+
+
+ ); + + return ( +
+ + +
+
+ {activeTab === 'overview' && renderOverview()} + {activeTab === 'events' && renderEvents()} + {activeTab === 'products' && renderProducts()} + {activeTab === 'risks' && renderRisks()} +
+
+
+ ); +} + +export default App; diff --git a/app/src/components/HotEvents.tsx b/app/src/components/HotEvents.tsx new file mode 100644 index 0000000..c8b2016 --- /dev/null +++ b/app/src/components/HotEvents.tsx @@ -0,0 +1,178 @@ +import { useState } from 'react'; +import { Flame, TrendingUp, TrendingDown, Minus, AlertTriangle, ChevronRight, Calendar, Target } from 'lucide-react'; +import type { HotEvent } from '@/types'; + +interface HotEventsProps { + events: HotEvent[]; +} + +// 影响等级星级 +function ImpactStars({ level }: { level: number }) { + return ( +
+ {Array.from({ length: 5 }).map((_, i) => ( +
+ ))} +
+ ); +} + +// 影响方向图标 +function ImpactBadge({ impact }: { impact: 'bullish' | 'bearish' | 'neutral' }) { + const config = { + bullish: { icon: TrendingUp, text: '利多', color: 'text-[#7dd75a]', bg: 'bg-[#7dd75a]/10' }, + bearish: { icon: TrendingDown, text: '利空', color: 'text-[#ef4444]', bg: 'bg-[#ef4444]/10' }, + neutral: { icon: Minus, text: '中性', color: 'text-[#a1a1aa]', bg: 'bg-[#a1a1aa]/10' }, + }; + + const { icon: Icon, text, color, bg } = config[impact]; + + return ( +
+ + {text} +
+ ); +} + +export function HotEventsPanel({ events }: HotEventsProps) { + const [selectedEvent, setSelectedEvent] = useState(events[0]); + + return ( +
+ {/* 事件列表 */} +
+
+ +

热点事件

+ 共 {events.length} 条 +
+ + {events.map((event) => ( +
setSelectedEvent(event)} + className={`p-4 rounded-xl border cursor-pointer transition-all duration-200 ${ + selectedEvent?.id === event.id + ? 'border-[#7dd75a] bg-[#7dd75a]/5' + : 'border-[#27272a] bg-[#0d0d10] hover:border-[#3f3f46]' + }`} + > +
+
+
+

{event.title}

+ +
+ +

{event.summary}

+ +
+
+ + {event.time} +
+ +
+ + 影响: +
+ {event.affectedProducts.slice(0, 3).map((product) => ( + + {product} + + ))} + {event.affectedProducts.length > 3 && ( + +{event.affectedProducts.length - 3} + )} +
+
+
+
+ +
+ + +
+
+
+ ))} +
+ + {/* 事件分析面板 */} +
+
+ {selectedEvent ? ( + <> +
+
+ +
+

智能分析

+
+ +
+
+

事件解读

+

{selectedEvent.analysis}

+
+ +
+

影响品种

+
+ {selectedEvent.affectedProducts.map((product) => ( + + {product} + + ))} +
+
+ +
+

风险提示

+
    + {selectedEvent.risks.map((risk, index) => ( +
  • + + {risk} +
  • + ))} +
+
+ +
+
+ 影响强度 + +
+
+
+ + ) : ( +
+ +

选择事件查看分析

+
+ )} +
+
+
+ ); +} diff --git a/app/src/components/KLineChart.tsx b/app/src/components/KLineChart.tsx new file mode 100644 index 0000000..ff2f16a --- /dev/null +++ b/app/src/components/KLineChart.tsx @@ -0,0 +1,373 @@ +import { useEffect, useRef, useState } from 'react'; +import * as echarts from 'echarts'; +import type { KLineData, MACDData } from '@/types'; + +interface KLineChartProps { + klineData: KLineData[]; + macdData: MACDData[]; + resistance: number[]; + support: number[]; + height?: number; +} + +export function KLineChart({ klineData, macdData, resistance, support, height = 500 }: KLineChartProps) { + const chartRef = useRef(null); + const chartInstance = useRef(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + if (!chartRef.current || klineData.length === 0) return; + + // 初始化图表 + if (!chartInstance.current) { + chartInstance.current = echarts.init(chartRef.current); + } + + const chart = chartInstance.current; + + // 处理数据 + const dates = klineData.map(d => { + const date = new Date(d.time); + return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`; + }); + + const klineValues = klineData.map(d => [d.open, d.close, d.low, d.high]); + const volumes = klineData.map(d => d.volume); + + // MACD数据 + const difData = macdData.map(d => d.dif); + const deaData = macdData.map(d => d.dea); + const macdBarData = macdData.map(d => ({ + value: d.macd, + itemStyle: { + color: d.macd >= 0 ? '#7dd75a' : '#ef4444', + }, + })); + + // 生成关键点位线 + const markLines: any[] = []; + + // 压力位 + resistance.forEach((price, index) => { + markLines.push({ + yAxis: price, + name: `压力${index + 1}`, + lineStyle: { + color: '#ef4444', + type: 'solid', + width: 1.5, + }, + label: { + formatter: `压力{${index + 1}}: {c}`, + color: '#ef4444', + fontSize: 11, + }, + }); + }); + + // 支撑位 + support.forEach((price, index) => { + markLines.push({ + yAxis: price, + name: `支撑${index + 1}`, + lineStyle: { + color: '#7dd75a', + type: 'solid', + width: 1.5, + }, + label: { + formatter: `支撑{${index + 1}}: {c}`, + color: '#7dd75a', + fontSize: 11, + }, + }); + }); + + // 计算MA + const calculateMA = (dayCount: number) => { + const result: number[] = []; + for (let i = 0; i < klineData.length; i++) { + if (i < dayCount - 1) { + result.push(Number(klineData[i].close.toFixed(2))); + continue; + } + let sum = 0; + for (let j = 0; j < dayCount; j++) { + sum += klineData[i - j].close; + } + result.push(Number((sum / dayCount).toFixed(2))); + } + return result; + }; + + const ma5 = calculateMA(5); + const ma10 = calculateMA(10); + const ma20 = calculateMA(20); + + const option: echarts.EChartsOption = { + backgroundColor: 'transparent', + animation: true, + animationDuration: 500, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'cross', + label: { + backgroundColor: '#0d5d1b', + }, + }, + backgroundColor: 'rgba(9, 9, 11, 0.95)', + borderColor: '#7dd75a', + borderWidth: 1, + textStyle: { + color: '#fff', + fontSize: 12, + }, + formatter: (params: any) => { + const kline = params.find((p: any) => p.seriesName === 'K线'); + const vol = params.find((p: any) => p.seriesName === '成交量'); + const macd = params.find((p: any) => p.seriesName === 'MACD'); + + if (!kline) return ''; + + const data = kline.data; + const open = data[1]; + const close = data[2]; + const low = data[3]; + const high = data[4]; + const change = ((close - open) / open * 100).toFixed(2); + const changeColor = close >= open ? '#7dd75a' : '#ef4444'; + + return ` +
+
${kline.axisValue}
+
+ 开盘:${open.toFixed(2)} + 最高:${high.toFixed(2)} + 最低:${low.toFixed(2)} + 收盘:${close.toFixed(2)} (${change}%) + ${vol ? `成交量:${vol.data.toLocaleString()}` : ''} + ${macd ? `MACD:${macd.data.toFixed(4)}` : ''} +
+
+ `; + }, + }, + axisPointer: { + link: [{ xAxisIndex: 'all' }], + label: { + backgroundColor: '#0d5d1b', + }, + }, + grid: [ + { + left: '3%', + right: '3%', + top: '5%', + height: '50%', + containLabel: true, + }, + { + left: '3%', + right: '3%', + top: '58%', + height: '15%', + containLabel: true, + }, + { + left: '3%', + right: '3%', + top: '76%', + height: '18%', + containLabel: true, + }, + ], + xAxis: [ + { + type: 'category', + data: dates, + boundaryGap: true, + axisLine: { lineStyle: { color: '#3f3f46' } }, + axisLabel: { color: '#a1a1aa', fontSize: 10 }, + axisTick: { show: false }, + splitLine: { show: false }, + }, + { + type: 'category', + gridIndex: 1, + data: dates, + boundaryGap: true, + axisLine: { show: false }, + axisLabel: { show: false }, + axisTick: { show: false }, + splitLine: { show: false }, + }, + { + type: 'category', + gridIndex: 2, + data: dates, + boundaryGap: true, + axisLine: { lineStyle: { color: '#3f3f46' } }, + axisLabel: { color: '#a1a1aa', fontSize: 10 }, + axisTick: { show: false }, + splitLine: { show: false }, + }, + ], + yAxis: [ + { + scale: true, + axisLine: { lineStyle: { color: '#3f3f46' } }, + axisLabel: { color: '#a1a1aa', fontSize: 10 }, + splitLine: { lineStyle: { color: '#27272a', type: 'dashed' } }, + position: 'right', + }, + { + scale: true, + gridIndex: 1, + axisLine: { show: false }, + axisLabel: { show: false }, + splitLine: { show: false }, + }, + { + scale: true, + gridIndex: 2, + axisLine: { lineStyle: { color: '#3f3f46' } }, + axisLabel: { color: '#a1a1aa', fontSize: 10 }, + splitLine: { lineStyle: { color: '#27272a', type: 'dashed' } }, + position: 'right', + }, + ], + dataZoom: [ + { + type: 'inside', + xAxisIndex: [0, 1, 2], + start: 50, + end: 100, + }, + { + type: 'slider', + xAxisIndex: [0, 1, 2], + start: 50, + end: 100, + height: 20, + bottom: 0, + borderColor: '#3f3f46', + fillerColor: 'rgba(125, 215, 90, 0.2)', + handleStyle: { color: '#7dd75a' }, + textStyle: { color: '#a1a1aa' }, + }, + ], + series: [ + { + name: 'K线', + type: 'candlestick', + data: klineValues, + itemStyle: { + color: '#7dd75a', + color0: '#ef4444', + borderColor: '#7dd75a', + borderColor0: '#ef4444', + }, + markLine: { + symbol: 'none', + data: markLines, + animation: true, + }, + }, + { + name: 'MA5', + type: 'line', + data: ma5, + smooth: true, + showSymbol: false, + lineStyle: { color: '#fbbf24', width: 1 }, + }, + { + name: 'MA10', + type: 'line', + data: ma10, + smooth: true, + showSymbol: false, + lineStyle: { color: '#60a5fa', width: 1 }, + }, + { + name: 'MA20', + type: 'line', + data: ma20, + smooth: true, + showSymbol: false, + lineStyle: { color: '#c084fc', width: 1 }, + }, + { + name: '成交量', + type: 'bar', + xAxisIndex: 1, + yAxisIndex: 1, + data: volumes, + itemStyle: { + color: (params: any) => { + const index = params.dataIndex; + const close = klineData[index]?.close; + const open = klineData[index]?.open; + return close >= open ? 'rgba(125, 215, 90, 0.6)' : 'rgba(239, 68, 68, 0.6)'; + }, + }, + }, + { + name: 'MACD', + type: 'bar', + xAxisIndex: 2, + yAxisIndex: 2, + data: macdBarData, + }, + { + name: 'DIF', + type: 'line', + xAxisIndex: 2, + yAxisIndex: 2, + data: difData, + smooth: true, + showSymbol: false, + lineStyle: { color: '#fbbf24', width: 1.5 }, + }, + { + name: 'DEA', + type: 'line', + xAxisIndex: 2, + yAxisIndex: 2, + data: deaData, + smooth: true, + showSymbol: false, + lineStyle: { color: '#60a5fa', width: 1.5 }, + }, + ], + }; + + chart.setOption(option); + setLoading(false); + + // 响应式 + const handleResize = () => { + chart.resize(); + }; + window.addEventListener('resize', handleResize); + + return () => { + window.removeEventListener('resize', handleResize); + }; + }, [klineData, macdData, resistance, support]); + + return ( +
+ {loading && ( +
+
+
+ 加载中... +
+
+ )} +
+
+ ); +} diff --git a/app/src/components/MarketOverview.tsx b/app/src/components/MarketOverview.tsx new file mode 100644 index 0000000..6e05852 --- /dev/null +++ b/app/src/components/MarketOverview.tsx @@ -0,0 +1,162 @@ +import { useEffect, useRef, useState } from 'react'; +import { TrendingUp, TrendingDown, Activity, DollarSign, BarChart3, Zap } from 'lucide-react'; +import type { MarketOverview } from '@/types'; + +interface MarketOverviewProps { + data: MarketOverview; +} + +// 数字动画组件 +function AnimatedNumber({ value, decimals = 1, suffix = '' }: { value: number; decimals?: number; suffix?: string }) { + const [displayValue, setDisplayValue] = useState(0); + const startTime = useRef(null); + const duration = 1000; + + useEffect(() => { + const animate = (timestamp: number) => { + if (!startTime.current) startTime.current = timestamp; + const progress = Math.min((timestamp - startTime.current) / duration, 1); + const easeOut = 1 - Math.pow(1 - progress, 3); + setDisplayValue(value * easeOut); + + if (progress < 1) { + requestAnimationFrame(animate); + } + }; + + requestAnimationFrame(animate); + + return () => { + startTime.current = null; + }; + }, [value]); + + return ( + + {displayValue.toFixed(decimals)}{suffix} + + ); +} + +// 迷你趋势图 +function MiniChart({ isUp }: { isUp: boolean }) { + const points = isUp + ? '0,30 10,25 20,28 30,20 40,22 50,15 60,18 70,10 80,12 90,5 100,8' + : '0,10 10,15 20,12 30,20 40,18 50,25 60,22 70,30 80,28 90,35 100,32'; + + return ( + + + + + + + + + + + ); +} + +export function MarketOverviewPanel({ data }: MarketOverviewProps) { + const cards = [ + { + title: '市场热度指数', + value: data.heatIndex, + change: data.heatChange, + suffix: '', + decimals: 1, + icon: Activity, + isUp: data.heatChange > 0, + description: data.heatChange > 0 ? '多头情绪高涨' : '市场情绪偏冷', + }, + { + title: '涨跌分布', + value: data.upCount, + change: data.downCount, + suffix: '', + decimals: 0, + icon: BarChart3, + isUp: true, + description: `涨: ${data.upCount} | 跌: ${data.downCount}`, + isDistribution: true, + }, + { + title: '资金流向', + value: data.capitalFlow, + change: 0, + suffix: '亿', + decimals: 1, + icon: DollarSign, + isUp: data.capitalFlow > 0, + description: data.capitalFlow > 0 ? '资金净流入' : '资金净流出', + }, + { + title: '波动率指数', + value: data.volatilityIndex, + change: data.volatilityChange, + suffix: '', + decimals: 1, + icon: Zap, + isUp: data.volatilityChange > 0, + description: data.volatilityChange > 0 ? '波动扩大' : '波动收窄', + }, + ]; + + return ( +
+ {cards.map((card, index) => ( +
+
+
+
+ +
+ {card.title} +
+ {!card.isDistribution && card.change !== 0 && ( +
0 ? 'text-[#7dd75a]' : 'text-[#ef4444]'}`}> + {card.change > 0 ? : } + {card.change > 0 ? '+' : ''}{card.change}% +
+ )} +
+ +
+ + {card.isDistribution ? ( + + {data.upCount} + / + {data.downCount} + + ) : ( + <> + + + )} + +
+ +
{card.description}
+ + +
+ ))} +
+ ); +} diff --git a/app/src/components/Navbar.tsx b/app/src/components/Navbar.tsx new file mode 100644 index 0000000..df678fa --- /dev/null +++ b/app/src/components/Navbar.tsx @@ -0,0 +1,150 @@ +import { useState, useEffect } from 'react'; +import { BarChart3, Bell, Clock, Menu, X } from 'lucide-react'; + +interface NavbarProps { + activeTab: string; + onTabChange: (tab: string) => void; +} + +const navItems = [ + { id: 'overview', label: '市场概览' }, + { id: 'events', label: '热点事件' }, + { id: 'products', label: '品种分析' }, + { id: 'risks', label: '风险提醒' }, +]; + +export function Navbar({ activeTab, onTabChange }: NavbarProps) { + const [currentTime, setCurrentTime] = useState(new Date()); + const [isScrolled, setIsScrolled] = useState(false); + const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); + + useEffect(() => { + const timer = setInterval(() => { + setCurrentTime(new Date()); + }, 1000); + + const handleScroll = () => { + setIsScrolled(window.scrollY > 10); + }; + + window.addEventListener('scroll', handleScroll); + + return () => { + clearInterval(timer); + window.removeEventListener('scroll', handleScroll); + }; + }, []); + + const formatTime = (date: Date) => { + return date.toLocaleString('zh-CN', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + }); + }; + + return ( + + ); +} diff --git a/app/src/components/ProductCard.tsx b/app/src/components/ProductCard.tsx new file mode 100644 index 0000000..dd782ab --- /dev/null +++ b/app/src/components/ProductCard.tsx @@ -0,0 +1,168 @@ +import { TrendingUp, TrendingDown, Minus, Clock, Target, BarChart3, ChevronRight } from 'lucide-react'; +import type { FuturesProduct, TrendDirection } from '@/types'; + +interface ProductCardProps { + product: FuturesProduct; + onClick?: () => void; +} + +// 趋势标签 +function TrendBadge({ direction, label }: { direction: TrendDirection; label: string }) { + const config = { + up: { icon: TrendingUp, color: 'text-[#7dd75a]', bg: 'bg-[#7dd75a]/10', border: 'border-[#7dd75a]/30' }, + down: { icon: TrendingDown, color: 'text-[#ef4444]', bg: 'bg-[#ef4444]/10', border: 'border-[#ef4444]/30' }, + sideways: { icon: Minus, color: 'text-[#a1a1aa]', bg: 'bg-[#a1a1aa]/10', border: 'border-[#a1a1aa]/30' }, + }; + + const { icon: Icon, color, bg, border } = config[direction]; + + return ( +
+ + {label} +
+ ); +} + +// 建议标签 +function RecommendationBadge({ recommendation }: { recommendation: 'long' | 'short' | 'wait' }) { + const config = { + long: { text: '逢低做多', color: 'text-[#7dd75a]', bg: 'bg-[#7dd75a]/10' }, + short: { text: '逢高做空', color: 'text-[#ef4444]', bg: 'bg-[#ef4444]/10' }, + wait: { text: '观望等待', color: 'text-[#a1a1aa]', bg: 'bg-[#a1a1aa]/10' }, + }; + + const { text, color, bg } = config[recommendation]; + + return ( + + {text} + + ); +} + +// 成功率进度条 +function SuccessRateBar({ rate }: { rate: number }) { + const getColor = (r: number) => { + if (r >= 70) return 'bg-[#7dd75a]'; + if (r >= 50) return 'bg-[#f59e0b]'; + return 'bg-[#ef4444]'; + }; + + return ( +
+
+
+
+ = 70 ? 'text-[#7dd75a]' : rate >= 50 ? 'text-[#f59e0b]' : 'text-[#ef4444]'}`}> + {rate}% + +
+ ); +} + +export function ProductCard({ product, onClick }: ProductCardProps) { + const isUp = product.change >= 0; + + const cycleLabels: Record = { + m5: '5分', + m15: '15分', + m30: '30分', + m60: '60分', + }; + + return ( +
+ {/* 头部 */} +
+
+
+

{product.name}

+ ({product.code}) +
+ +
+
+
+ ¥{product.price.toLocaleString()} +
+
+ {isUp ? : } + {isUp ? '+' : ''}{product.change.toFixed(2)} ({isUp ? '+' : ''}{product.changePercent}%) +
+
+
+ + {/* 多周期趋势 */} +
+
+ + 多周期趋势 +
+
+ {Object.entries(product.cycles).map(([key, trend]) => ( + + ))} +
+
+ + {/* 成功率和趋势评分 */} +
+
+ + + 交易成功率 + +
+ + +
+ 趋势评分 + = 80 ? 'text-[#7dd75a]' : product.trendScore >= 60 ? 'text-[#f59e0b]' : 'text-[#ef4444]'}`}> + {product.trendScore}/100 + +
+
+
= 80 ? 'bg-[#7dd75a]' : product.trendScore >= 60 ? 'bg-[#f59e0b]' : 'bg-[#ef4444]' + }`} + style={{ width: `${product.trendScore}%` }} + /> +
+
+ + {/* 关键点位 */} +
+
+ + 关键点位 +
+
+
+ 压力: + {product.keyLevels.resistance[0]?.toLocaleString() || '-'} +
+
+ 支撑: + {product.keyLevels.support[0]?.toLocaleString() || '-'} +
+
+
+ + {/* 悬停指示 */} +
+ + 查看详情 + + +
+
+ ); +} diff --git a/app/src/components/ProductDetail.tsx b/app/src/components/ProductDetail.tsx new file mode 100644 index 0000000..fecb2fe --- /dev/null +++ b/app/src/components/ProductDetail.tsx @@ -0,0 +1,380 @@ +import { useState, useEffect } from 'react'; +import { ArrowLeft, TrendingUp, TrendingDown, Target, Clock, BarChart3, Activity, Zap } from 'lucide-react'; +import { KLineChart } from './KLineChart'; +import type { FuturesProduct, CycleAnalysis, TechnicalIndicators, TradingAdvice } from '@/types'; +import { generateCycleAnalysis, generateTechnicalIndicators, generateTradingAdvice } from '@/data/mockData'; + +interface ProductDetailProps { + product: FuturesProduct; + onBack: () => void; +} + +// 周期切换按钮 +function PeriodButton({ + label, + isActive, + onClick +}: { + label: string; + isActive: boolean; + onClick: () => void; +}) { + return ( + + ); +} + +// 指标卡片 +function IndicatorCard({ + title, + value, + status, + signal +}: { + title: string; + value: string; + status: string; + signal?: 'positive' | 'negative' | 'neutral'; +}) { + const signalColors = { + positive: 'text-[#7dd75a]', + negative: 'text-[#ef4444]', + neutral: 'text-[#a1a1aa]', + }; + + return ( +
+
{title}
+
{value}
+
{status}
+
+ ); +} + +// 关键点位行 +function KeyLevelRow({ + label, + value, + type +}: { + label: string; + value: number; + type: 'resistance' | 'support'; +}) { + return ( +
+ {label} + + {value.toLocaleString()} + +
+ ); +} + +export function ProductDetail({ product, onBack }: ProductDetailProps) { + const [selectedPeriod, setSelectedPeriod] = useState<'m5' | 'm15' | 'm30' | 'm60'>('m15'); + const [cycleData, setCycleData] = useState(null); + const [indicators, setIndicators] = useState(null); + const [advice, setAdvice] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + setLoading(true); + // 模拟数据加载 + setTimeout(() => { + setCycleData(generateCycleAnalysis(product.id, selectedPeriod)); + setIndicators(generateTechnicalIndicators(product.id)); + setAdvice(generateTradingAdvice(product.id)); + setLoading(false); + }, 300); + }, [product.id, selectedPeriod]); + + const isUp = product.change >= 0; + + const periods = [ + { key: 'm5', label: '5分钟' }, + { key: 'm15', label: '15分钟' }, + { key: 'm30', label: '30分钟' }, + { key: 'm60', label: '60分钟' }, + ]; + + const cycleLabels: Record = { + m5: '5分钟', + m15: '15分钟', + m30: '30分钟', + m60: '60分钟', + }; + + return ( +
+ {/* 返回按钮和标题 */} +
+ +
+

{product.name} ({product.code})

+

详细技术分析

+
+
+ + {/* 价格信息栏 */} +
+
+
+
+ ¥{product.price.toLocaleString()} +
+
+ {isUp ? : } + {isUp ? '+' : ''}{product.change.toFixed(2)} ({isUp ? '+' : ''}{product.changePercent}%) +
+
+ +
+ +
+
+
开盘
+
{product.open.toLocaleString()}
+
+
+
最高
+
{product.high.toLocaleString()}
+
+
+
最低
+
{product.low.toLocaleString()}
+
+
+
持仓量
+
{product.openInterest.toLocaleString()}
+
+
+
+
+ +
+ {/* K线图区域 */} +
+ {/* 周期切换 */} +
+ + 周期选择 +
+ {periods.map((p) => ( + setSelectedPeriod(p.key as any)} + /> + ))} +
+
+ + {/* 图表 */} +
+ {loading ? ( +
+
+
+ 加载图表数据... +
+
+ ) : cycleData ? ( + + ) : null} +
+
+ + {/* 分析面板 */} +
+ {/* 交易建议 */} +
+
+
+ +
+

交易建议

+
+ + {advice && ( +
+
+
操作建议
+
+ {advice.action === 'long' ? '逢低做多' : advice.action === 'short' ? '逢高做空' : '观望等待'} +
+
{advice.reason}
+
+ +
+
+
建议入场
+
{advice.entryPrice.toLocaleString()}
+
+
+
目标价位
+
{advice.targetPrice.toLocaleString()}
+
+
+
止损价位
+
{advice.stopLoss.toLocaleString()}
+
+
+
风险等级
+
+ {advice.riskLevel === 'low' ? '低' : advice.riskLevel === 'medium' ? '中' : '高'} +
+
+
+
+ )} +
+ + {/* 技术指标 */} +
+
+
+ +
+

技术指标

+
+ + {indicators && ( +
+ + + + +
+ )} +
+ + {/* 关键点位 */} +
+
+
+ +
+

关键点位

+
+ +
+
压力位
+ {product.keyLevels.resistance.map((level, index) => ( + + ))} +
+ +
+
支撑位
+ {product.keyLevels.support.map((level, index) => ( + + ))} +
+
+ + {/* 多周期一致性 */} +
+
+
+ +
+

多周期一致性

+
+ +
+ {Object.entries(product.cycles).map(([key, trend]) => ( +
+ {cycleLabels[key]} +
+ {trend === 'up' ? : trend === 'down' ? :
} + {trend === 'up' ? '上涨' : trend === 'down' ? '下跌' : '震荡'} +
+
+ ))} +
+ +
+
+ 周期共振度 + = 80 ? 'text-[#7dd75a]' : product.trendScore >= 60 ? 'text-[#f59e0b]' : 'text-[#ef4444]'}`}> + {product.trendScore}% + +
+
+
= 80 ? 'bg-[#7dd75a]' : product.trendScore >= 60 ? 'bg-[#f59e0b]' : 'bg-[#ef4444]' + }`} + style={{ width: `${product.trendScore}%` }} + /> +
+
+
+
+
+
+ ); +} diff --git a/app/src/components/RiskAlerts.tsx b/app/src/components/RiskAlerts.tsx new file mode 100644 index 0000000..b4e4f44 --- /dev/null +++ b/app/src/components/RiskAlerts.tsx @@ -0,0 +1,100 @@ +import { AlertTriangle, Bell, Shield, TrendingDown, AlertOctagon } from 'lucide-react'; +import type { RiskAlert } from '@/types'; + +interface RiskAlertsProps { + alerts: RiskAlert[]; +} + +// 风险等级徽章 +function RiskLevelBadge({ level }: { level: 'high' | 'medium' | 'low' }) { + const config = { + high: { text: '高风险', color: 'text-[#ef4444]', bg: 'bg-[#ef4444]/10', icon: AlertOctagon }, + medium: { text: '中风险', color: 'text-[#f59e0b]', bg: 'bg-[#f59e0b]/10', icon: AlertTriangle }, + low: { text: '低风险', color: 'text-[#7dd75a]', bg: 'bg-[#7dd75a]/10', icon: Shield }, + }; + + const { text, color, bg, icon: Icon } = config[level]; + + return ( +
+ + {text} +
+ ); +} + +export function RiskAlertsPanel({ alerts }: RiskAlertsProps) { + if (alerts.length === 0) { + return ( +
+
+
+ +
+

风险提醒

+
+
+ +

当前无重大风险事件

+
+
+ ); + } + + return ( +
+
+
+
+ +
+

风险提醒

+
+ + {alerts.length} 条 + +
+ +
+ {alerts.map((alert) => ( +
+
+
+

{alert.title}

+

{alert.description}

+
+ +
+ +
+
+ 影响品种: +
+ {alert.affectedProducts.slice(0, 2).map((product) => ( + + {product} + + ))} + {alert.affectedProducts.length > 2 && ( + +{alert.affectedProducts.length - 2} + )} +
+
+ {alert.time} +
+ +
+
+ + 建议: {alert.suggestion} +
+
+
+ ))} +
+
+ ); +} diff --git a/app/src/components/ui/accordion.tsx b/app/src/components/ui/accordion.tsx new file mode 100644 index 0000000..d21b65f --- /dev/null +++ b/app/src/components/ui/accordion.tsx @@ -0,0 +1,64 @@ +import * as React from "react" +import * as AccordionPrimitive from "@radix-ui/react-accordion" +import { ChevronDownIcon } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Accordion({ + ...props +}: React.ComponentProps) { + return +} + +function AccordionItem({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AccordionTrigger({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + + svg]:rotate-180", + className + )} + {...props} + > + {children} + + + + ) +} + +function AccordionContent({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + +
{children}
+
+ ) +} + +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/app/src/components/ui/alert-dialog.tsx b/app/src/components/ui/alert-dialog.tsx new file mode 100644 index 0000000..935eecf --- /dev/null +++ b/app/src/components/ui/alert-dialog.tsx @@ -0,0 +1,155 @@ +import * as React from "react" +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" + +import { cn } from "@/lib/utils" +import { buttonVariants } from "@/components/ui/button" + +function AlertDialog({ + ...props +}: React.ComponentProps) { + return +} + +function AlertDialogTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogPortal({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + + ) +} + +function AlertDialogHeader({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDialogFooter({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogAction({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogCancel({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +} diff --git a/app/src/components/ui/alert.tsx b/app/src/components/ui/alert.tsx new file mode 100644 index 0000000..1421354 --- /dev/null +++ b/app/src/components/ui/alert.tsx @@ -0,0 +1,66 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const alertVariants = cva( + "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", + { + variants: { + variant: { + default: "bg-card text-card-foreground", + destructive: + "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function Alert({ + className, + variant, + ...props +}: React.ComponentProps<"div"> & VariantProps) { + return ( +
+ ) +} + +function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDescription({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +export { Alert, AlertTitle, AlertDescription } diff --git a/app/src/components/ui/aspect-ratio.tsx b/app/src/components/ui/aspect-ratio.tsx new file mode 100644 index 0000000..3df3fd0 --- /dev/null +++ b/app/src/components/ui/aspect-ratio.tsx @@ -0,0 +1,11 @@ +"use client" + +import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" + +function AspectRatio({ + ...props +}: React.ComponentProps) { + return +} + +export { AspectRatio } diff --git a/app/src/components/ui/avatar.tsx b/app/src/components/ui/avatar.tsx new file mode 100644 index 0000000..b7224f0 --- /dev/null +++ b/app/src/components/ui/avatar.tsx @@ -0,0 +1,51 @@ +import * as React from "react" +import * as AvatarPrimitive from "@radix-ui/react-avatar" + +import { cn } from "@/lib/utils" + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/app/src/components/ui/badge.tsx b/app/src/components/ui/badge.tsx new file mode 100644 index 0000000..fd3a406 --- /dev/null +++ b/app/src/components/ui/badge.tsx @@ -0,0 +1,46 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + secondary: + "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + destructive: + "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function Badge({ + className, + variant, + asChild = false, + ...props +}: React.ComponentProps<"span"> & + VariantProps & { asChild?: boolean }) { + const Comp = asChild ? Slot : "span" + + return ( + + ) +} + +export { Badge, badgeVariants } diff --git a/app/src/components/ui/breadcrumb.tsx b/app/src/components/ui/breadcrumb.tsx new file mode 100644 index 0000000..eb88f32 --- /dev/null +++ b/app/src/components/ui/breadcrumb.tsx @@ -0,0 +1,109 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { ChevronRight, MoreHorizontal } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { + return